{"version":3,"file":"jsonwebtoken-BFigh_qT.js","sources":["../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.cjs","../../node_modules/safe-buffer/index.js","../../node_modules/events/events.js","../../node_modules/inherits/inherits_browser.js","../../node_modules/readable-stream/lib/internal/streams/stream-browser.js","../../node_modules/has-symbols/shams.js","../../node_modules/has-tostringtag/shams.js","../../node_modules/es-errors/index.js","../../node_modules/es-errors/eval.js","../../node_modules/es-errors/range.js","../../node_modules/es-errors/ref.js","../../node_modules/es-errors/syntax.js","../../node_modules/es-errors/type.js","../../node_modules/es-errors/uri.js","../../node_modules/has-symbols/index.js","../../node_modules/has-proto/index.js","../../node_modules/function-bind/implementation.js","../../node_modules/function-bind/index.js","../../node_modules/hasown/index.js","../../node_modules/get-intrinsic/index.js","../../node_modules/es-define-property/index.js","../../node_modules/gopd/index.js","../../node_modules/define-data-property/index.js","../../node_modules/has-property-descriptors/index.js","../../node_modules/set-function-length/index.js","../../node_modules/call-bind/index.js","../../node_modules/call-bind/callBound.js","../../node_modules/is-arguments/index.js","../../node_modules/is-generator-function/index.js","../../node_modules/is-callable/index.js","../../node_modules/for-each/index.js","../../node_modules/possible-typed-array-names/index.js","../../node_modules/available-typed-arrays/index.js","../../node_modules/which-typed-array/index.js","../../node_modules/is-typed-array/index.js","../../node_modules/util/support/types.js","../../node_modules/util/support/isBufferBrowser.js","../../node_modules/util/util.js","../../node_modules/readable-stream/lib/internal/streams/buffer_list.js","../../node_modules/readable-stream/lib/internal/streams/destroy.js","../../node_modules/readable-stream/errors-browser.js","../../node_modules/readable-stream/lib/internal/streams/state.js","../../node_modules/util-deprecate/browser.js","../../node_modules/readable-stream/lib/_stream_writable.js","../../node_modules/readable-stream/lib/_stream_duplex.js","../../node_modules/string_decoder/lib/string_decoder.js","../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../../node_modules/readable-stream/lib/internal/streams/async_iterator.js","../../node_modules/readable-stream/lib/internal/streams/from-browser.js","../../node_modules/readable-stream/lib/_stream_readable.js","../../node_modules/readable-stream/lib/_stream_transform.js","../../node_modules/readable-stream/lib/_stream_passthrough.js","../../node_modules/readable-stream/lib/internal/streams/pipeline.js","../../node_modules/stream-browserify/index.js","../../node_modules/jws/lib/data-stream.js","../../node_modules/buffer-equal-constant-time/index.js","../../node_modules/randombytes/browser.js","../../node_modules/hash-base/index.js","../../node_modules/md5.js/index.js","../../node_modules/ripemd160/index.js","../../node_modules/sha.js/hash.js","../../node_modules/sha.js/sha.js","../../node_modules/sha.js/sha1.js","../../node_modules/sha.js/sha256.js","../../node_modules/sha.js/sha224.js","../../node_modules/sha.js/sha512.js","../../node_modules/sha.js/sha384.js","../../node_modules/sha.js/index.js","../../node_modules/cipher-base/index.js","../../node_modules/create-hash/browser.js","../../node_modules/create-hmac/legacy.js","../../node_modules/create-hash/md5.js","../../node_modules/create-hmac/browser.js","../../node_modules/browserify-sign/algos.js","../../node_modules/pbkdf2/lib/precondition.js","../../node_modules/pbkdf2/lib/default-encoding.js","../../node_modules/pbkdf2/lib/to-buffer.js","../../node_modules/pbkdf2/lib/sync-browser.js","../../node_modules/pbkdf2/lib/async.js","../../node_modules/pbkdf2/browser.js","../../node_modules/des.js/lib/des/utils.js","../../node_modules/minimalistic-assert/index.js","../../node_modules/des.js/lib/des/cipher.js","../../node_modules/des.js/lib/des/des.js","../../node_modules/des.js/lib/des/cbc.js","../../node_modules/des.js/lib/des/ede.js","../../node_modules/des.js/lib/des.js","../../node_modules/browserify-des/index.js","../../node_modules/browserify-aes/modes/ecb.js","../../node_modules/buffer-xor/index.js","../../node_modules/browserify-aes/modes/cbc.js","../../node_modules/browserify-aes/modes/cfb.js","../../node_modules/browserify-aes/modes/cfb8.js","../../node_modules/browserify-aes/modes/cfb1.js","../../node_modules/browserify-aes/modes/ofb.js","../../node_modules/browserify-aes/incr32.js","../../node_modules/browserify-aes/modes/ctr.js","../../node_modules/browserify-aes/modes/index.js","../../node_modules/browserify-aes/aes.js","../../node_modules/browserify-aes/ghash.js","../../node_modules/browserify-aes/authCipher.js","../../node_modules/browserify-aes/streamCipher.js","../../node_modules/evp_bytestokey/index.js","../../node_modules/browserify-aes/encrypter.js","../../node_modules/browserify-aes/decrypter.js","../../node_modules/browserify-aes/browser.js","../../node_modules/browserify-des/modes.js","../../node_modules/browserify-cipher/browser.js","../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","../../node_modules/brorand/index.js","../../node_modules/miller-rabin/lib/mr.js","../../node_modules/diffie-hellman/lib/generatePrime.js","../../node_modules/diffie-hellman/lib/dh.js","../../node_modules/diffie-hellman/browser.js","../../node_modules/process-nextick-args/index.js","../../node_modules/isarray/index.js","../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js","../../node_modules/core-util-is/lib/util.js","../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js","../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","../../node_modules/bn.js/lib/bn.js","../../node_modules/browserify-rsa/index.js","../../node_modules/elliptic/node_modules/bn.js/lib/bn.js","../../node_modules/minimalistic-crypto-utils/lib/utils.js","../../node_modules/elliptic/lib/elliptic/utils.js","../../node_modules/elliptic/lib/elliptic/curve/base.js","../../node_modules/elliptic/lib/elliptic/curve/short.js","../../node_modules/elliptic/lib/elliptic/curve/mont.js","../../node_modules/elliptic/lib/elliptic/curve/edwards.js","../../node_modules/elliptic/lib/elliptic/curve/index.js","../../node_modules/hash.js/lib/hash/utils.js","../../node_modules/hash.js/lib/hash/common.js","../../node_modules/hash.js/lib/hash/sha/common.js","../../node_modules/hash.js/lib/hash/sha/1.js","../../node_modules/hash.js/lib/hash/sha/256.js","../../node_modules/hash.js/lib/hash/sha/224.js","../../node_modules/hash.js/lib/hash/sha/512.js","../../node_modules/hash.js/lib/hash/sha/384.js","../../node_modules/hash.js/lib/hash/sha.js","../../node_modules/hash.js/lib/hash/ripemd.js","../../node_modules/hash.js/lib/hash/hmac.js","../../node_modules/hash.js/lib/hash.js","../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","../../node_modules/elliptic/lib/elliptic/curves.js","../../node_modules/hmac-drbg/lib/hmac-drbg.js","../../node_modules/elliptic/lib/elliptic/ec/key.js","../../node_modules/elliptic/lib/elliptic/ec/signature.js","../../node_modules/elliptic/lib/elliptic/ec/index.js","../../node_modules/elliptic/lib/elliptic/eddsa/key.js","../../node_modules/elliptic/lib/elliptic/eddsa/signature.js","../../node_modules/elliptic/lib/elliptic/eddsa/index.js","../../node_modules/elliptic/lib/elliptic.js","../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","../../node_modules/vm-browserify/index.js","../../node_modules/asn1.js/lib/asn1/api.js","../../node_modules/asn1.js/lib/asn1/base/reporter.js","../../node_modules/asn1.js/lib/asn1/base/buffer.js","../../node_modules/asn1.js/lib/asn1/base/node.js","../../node_modules/asn1.js/lib/asn1/base/index.js","../../node_modules/asn1.js/lib/asn1/constants/der.js","../../node_modules/asn1.js/lib/asn1/constants/index.js","../../node_modules/asn1.js/lib/asn1/decoders/der.js","../../node_modules/asn1.js/lib/asn1/decoders/pem.js","../../node_modules/asn1.js/lib/asn1/decoders/index.js","../../node_modules/asn1.js/lib/asn1/encoders/der.js","../../node_modules/asn1.js/lib/asn1/encoders/pem.js","../../node_modules/asn1.js/lib/asn1/encoders/index.js","../../node_modules/asn1.js/lib/asn1.js","../../node_modules/parse-asn1/certificate.js","../../node_modules/parse-asn1/asn1.js","../../node_modules/parse-asn1/fixProc.js","../../node_modules/parse-asn1/index.js","../../node_modules/browserify-sign/browser/sign.js","../../node_modules/browserify-sign/browser/verify.js","../../node_modules/browserify-sign/browser/index.js","../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","../../node_modules/create-ecdh/browser.js","../../node_modules/public-encrypt/mgf.js","../../node_modules/public-encrypt/xor.js","../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","../../node_modules/public-encrypt/withPublic.js","../../node_modules/public-encrypt/publicEncrypt.js","../../node_modules/public-encrypt/privateDecrypt.js","../../node_modules/public-encrypt/browser.js","../../node_modules/randomfill/browser.js","../../node_modules/crypto-browserify/index.js","../../node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js","../../node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js","../../node_modules/jwa/index.js","../../node_modules/jws/lib/tostring.js","../../node_modules/jws/lib/sign-stream.js","../../node_modules/jws/lib/verify-stream.js","../../node_modules/jws/index.js","../../node_modules/jsonwebtoken/decode.js","../../node_modules/jsonwebtoken/lib/JsonWebTokenError.js","../../node_modules/jsonwebtoken/lib/NotBeforeError.js","../../node_modules/jsonwebtoken/lib/TokenExpiredError.js","../../node_modules/ms/index.js","../../node_modules/jsonwebtoken/lib/timespan.js","../../node_modules/jsonwebtoken/node_modules/semver/internal/constants.js","../../node_modules/jsonwebtoken/node_modules/semver/internal/debug.js","../../node_modules/jsonwebtoken/node_modules/semver/internal/re.js","../../node_modules/jsonwebtoken/node_modules/semver/internal/parse-options.js","../../node_modules/jsonwebtoken/node_modules/semver/internal/identifiers.js","../../node_modules/jsonwebtoken/node_modules/semver/classes/semver.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/parse.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/valid.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/clean.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/inc.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/diff.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/major.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/minor.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/patch.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/prerelease.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/compare.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/rcompare.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/compare-loose.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/compare-build.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/sort.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/rsort.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/gt.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/lt.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/eq.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/neq.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/gte.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/lte.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/cmp.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/coerce.js","../../node_modules/jsonwebtoken/node_modules/semver/internal/lrucache.js","../../node_modules/jsonwebtoken/node_modules/semver/classes/range.js","../../node_modules/jsonwebtoken/node_modules/semver/classes/comparator.js","../../node_modules/jsonwebtoken/node_modules/semver/functions/satisfies.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/to-comparators.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/max-satisfying.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/min-satisfying.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/min-version.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/valid.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/outside.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/gtr.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/ltr.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/intersects.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/simplify.js","../../node_modules/jsonwebtoken/node_modules/semver/ranges/subset.js","../../node_modules/jsonwebtoken/node_modules/semver/index.js","../../node_modules/jsonwebtoken/lib/asymmetricKeyDetailsSupported.js","../../node_modules/jsonwebtoken/lib/rsaPssKeyDetailsSupported.js","../../node_modules/jsonwebtoken/lib/validateAsymmetricKey.js","../../node_modules/jsonwebtoken/lib/psSupported.js","../../node_modules/jsonwebtoken/verify.js","../../node_modules/lodash.includes/index.js","../../node_modules/lodash.isboolean/index.js","../../node_modules/lodash.isinteger/index.js","../../node_modules/lodash.isnumber/index.js","../../node_modules/lodash.isplainobject/index.js","../../node_modules/lodash.isstring/index.js","../../node_modules/lodash.once/index.js","../../node_modules/jsonwebtoken/sign.js","../../node_modules/jsonwebtoken/index.js"],"sourcesContent":["'use strict';\n\nObject.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });\n\nvar buffer = {};\n\nvar base64Js = {};\n\nbase64Js.byteLength = byteLength;\nbase64Js.toByteArray = toByteArray;\nbase64Js.fromByteArray = fromByteArray;\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62;\nrevLookup['_'.charCodeAt(0)] = 63;\n\nfunction getLens (b64) {\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=');\n if (validLen === -1) validLen = len;\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4);\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n\n var curByte = 0;\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen;\n\n var i;\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)];\n arr[curByte++] = (tmp >> 16) & 0xFF;\n arr[curByte++] = (tmp >> 8) & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4);\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2);\n arr[curByte++] = (tmp >> 8) & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp;\n var output = [];\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF);\n output.push(tripletToBase64(tmp));\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n );\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n );\n }\n\n return parts.join('')\n}\n\nvar ieee754 = {};\n\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\n\nieee754.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = (nBytes * 8) - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? (nBytes - 1) : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n\n i += d;\n\n e = s & ((1 << (-nBits)) - 1);\n s >>= (-nBits);\n nBits += eLen;\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1);\n e >>= (-nBits);\n nBits += mLen;\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n};\n\nieee754.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = (nBytes * 8) - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n var i = isLE ? 0 : (nBytes - 1);\n var d = isLE ? 1 : -1;\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m;\n eLen += mLen;\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n};\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n(function (exports) {\n\n\tconst base64 = base64Js;\n\tconst ieee754$1 = ieee754;\n\tconst customInspectSymbol =\n\t (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n\t ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n\t : null;\n\n\texports.Buffer = Buffer;\n\texports.SlowBuffer = SlowBuffer;\n\texports.INSPECT_MAX_BYTES = 50;\n\n\tconst K_MAX_LENGTH = 0x7fffffff;\n\texports.kMaxLength = K_MAX_LENGTH;\n\tconst { Uint8Array: GlobalUint8Array, ArrayBuffer: GlobalArrayBuffer, SharedArrayBuffer: GlobalSharedArrayBuffer } = globalThis;\n\n\t/**\n\t * If `Buffer.TYPED_ARRAY_SUPPORT`:\n\t * === true Use Uint8Array implementation (fastest)\n\t * === false Print warning and recommend using `buffer` v4.x which has an Object\n\t * implementation (most compatible, even IE6)\n\t *\n\t * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n\t * Opera 11.6+, iOS 4.2+.\n\t *\n\t * We report that the browser does not support typed arrays if the are not subclassable\n\t * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n\t * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n\t * for __proto__ and has a buggy typed array implementation.\n\t */\n\tBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\n\tif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n\t typeof console.error === 'function') {\n\t console.error(\n\t 'This browser lacks typed array (Uint8Array) support which is required by ' +\n\t '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n\t );\n\t}\n\n\tfunction typedArraySupport () {\n\t // Can typed array instances can be augmented?\n\t try {\n\t const arr = new GlobalUint8Array(1);\n\t const proto = { foo: function () { return 42 } };\n\t Object.setPrototypeOf(proto, GlobalUint8Array.prototype);\n\t Object.setPrototypeOf(arr, proto);\n\t return arr.foo() === 42\n\t } catch (e) {\n\t return false\n\t }\n\t}\n\n\tObject.defineProperty(Buffer.prototype, 'parent', {\n\t enumerable: true,\n\t get: function () {\n\t if (!Buffer.isBuffer(this)) return undefined\n\t return this.buffer\n\t }\n\t});\n\n\tObject.defineProperty(Buffer.prototype, 'offset', {\n\t enumerable: true,\n\t get: function () {\n\t if (!Buffer.isBuffer(this)) return undefined\n\t return this.byteOffset\n\t }\n\t});\n\n\tfunction createBuffer (length) {\n\t if (length > K_MAX_LENGTH) {\n\t throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n\t }\n\t // Return an augmented `Uint8Array` instance\n\t const buf = new GlobalUint8Array(length);\n\t Object.setPrototypeOf(buf, Buffer.prototype);\n\t return buf\n\t}\n\n\t/**\n\t * The Buffer constructor returns instances of `Uint8Array` that have their\n\t * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n\t * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n\t * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n\t * returns a single octet.\n\t *\n\t * The `Uint8Array` prototype remains unmodified.\n\t */\n\n\tfunction Buffer (arg, encodingOrOffset, length) {\n\t // Common case.\n\t if (typeof arg === 'number') {\n\t if (typeof encodingOrOffset === 'string') {\n\t throw new TypeError(\n\t 'The \"string\" argument must be of type string. Received type number'\n\t )\n\t }\n\t return allocUnsafe(arg)\n\t }\n\t return from(arg, encodingOrOffset, length)\n\t}\n\n\tBuffer.poolSize = 8192; // not used by this implementation\n\n\tfunction from (value, encodingOrOffset, length) {\n\t if (typeof value === 'string') {\n\t return fromString(value, encodingOrOffset)\n\t }\n\n\t if (GlobalArrayBuffer.isView(value)) {\n\t return fromArrayView(value)\n\t }\n\n\t if (value == null) {\n\t throw new TypeError(\n\t 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n\t 'or Array-like Object. Received type ' + (typeof value)\n\t )\n\t }\n\n\t if (isInstance(value, GlobalArrayBuffer) ||\n\t (value && isInstance(value.buffer, GlobalArrayBuffer))) {\n\t return fromArrayBuffer(value, encodingOrOffset, length)\n\t }\n\n\t if (typeof GlobalSharedArrayBuffer !== 'undefined' &&\n\t (isInstance(value, GlobalSharedArrayBuffer) ||\n\t (value && isInstance(value.buffer, GlobalSharedArrayBuffer)))) {\n\t return fromArrayBuffer(value, encodingOrOffset, length)\n\t }\n\n\t if (typeof value === 'number') {\n\t throw new TypeError(\n\t 'The \"value\" argument must not be of type number. Received type number'\n\t )\n\t }\n\n\t const valueOf = value.valueOf && value.valueOf();\n\t if (valueOf != null && valueOf !== value) {\n\t return Buffer.from(valueOf, encodingOrOffset, length)\n\t }\n\n\t const b = fromObject(value);\n\t if (b) return b\n\n\t if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n\t typeof value[Symbol.toPrimitive] === 'function') {\n\t return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n\t }\n\n\t throw new TypeError(\n\t 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n\t 'or Array-like Object. Received type ' + (typeof value)\n\t )\n\t}\n\n\t/**\n\t * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n\t * if value is a number.\n\t * Buffer.from(str[, encoding])\n\t * Buffer.from(array)\n\t * Buffer.from(buffer)\n\t * Buffer.from(arrayBuffer[, byteOffset[, length]])\n\t **/\n\tBuffer.from = function (value, encodingOrOffset, length) {\n\t return from(value, encodingOrOffset, length)\n\t};\n\n\t// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n\t// https://github.com/feross/buffer/pull/148\n\tObject.setPrototypeOf(Buffer.prototype, GlobalUint8Array.prototype);\n\tObject.setPrototypeOf(Buffer, GlobalUint8Array);\n\n\tfunction assertSize (size) {\n\t if (typeof size !== 'number') {\n\t throw new TypeError('\"size\" argument must be of type number')\n\t } else if (size < 0) {\n\t throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n\t }\n\t}\n\n\tfunction alloc (size, fill, encoding) {\n\t assertSize(size);\n\t if (size <= 0) {\n\t return createBuffer(size)\n\t }\n\t if (fill !== undefined) {\n\t // Only pay attention to encoding if it's a string. This\n\t // prevents accidentally sending in a number that would\n\t // be interpreted as a start offset.\n\t return typeof encoding === 'string'\n\t ? createBuffer(size).fill(fill, encoding)\n\t : createBuffer(size).fill(fill)\n\t }\n\t return createBuffer(size)\n\t}\n\n\t/**\n\t * Creates a new filled Buffer instance.\n\t * alloc(size[, fill[, encoding]])\n\t **/\n\tBuffer.alloc = function (size, fill, encoding) {\n\t return alloc(size, fill, encoding)\n\t};\n\n\tfunction allocUnsafe (size) {\n\t assertSize(size);\n\t return createBuffer(size < 0 ? 0 : checked(size) | 0)\n\t}\n\n\t/**\n\t * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n\t * */\n\tBuffer.allocUnsafe = function (size) {\n\t return allocUnsafe(size)\n\t};\n\t/**\n\t * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n\t */\n\tBuffer.allocUnsafeSlow = function (size) {\n\t return allocUnsafe(size)\n\t};\n\n\tfunction fromString (string, encoding) {\n\t if (typeof encoding !== 'string' || encoding === '') {\n\t encoding = 'utf8';\n\t }\n\n\t if (!Buffer.isEncoding(encoding)) {\n\t throw new TypeError('Unknown encoding: ' + encoding)\n\t }\n\n\t const length = byteLength(string, encoding) | 0;\n\t let buf = createBuffer(length);\n\n\t const actual = buf.write(string, encoding);\n\n\t if (actual !== length) {\n\t // Writing a hex string, for example, that contains invalid characters will\n\t // cause everything after the first invalid character to be ignored. (e.g.\n\t // 'abxxcd' will be treated as 'ab')\n\t buf = buf.slice(0, actual);\n\t }\n\n\t return buf\n\t}\n\n\tfunction fromArrayLike (array) {\n\t const length = array.length < 0 ? 0 : checked(array.length) | 0;\n\t const buf = createBuffer(length);\n\t for (let i = 0; i < length; i += 1) {\n\t buf[i] = array[i] & 255;\n\t }\n\t return buf\n\t}\n\n\tfunction fromArrayView (arrayView) {\n\t if (isInstance(arrayView, GlobalUint8Array)) {\n\t const copy = new GlobalUint8Array(arrayView);\n\t return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n\t }\n\t return fromArrayLike(arrayView)\n\t}\n\n\tfunction fromArrayBuffer (array, byteOffset, length) {\n\t if (byteOffset < 0 || array.byteLength < byteOffset) {\n\t throw new RangeError('\"offset\" is outside of buffer bounds')\n\t }\n\n\t if (array.byteLength < byteOffset + (length || 0)) {\n\t throw new RangeError('\"length\" is outside of buffer bounds')\n\t }\n\n\t let buf;\n\t if (byteOffset === undefined && length === undefined) {\n\t buf = new GlobalUint8Array(array);\n\t } else if (length === undefined) {\n\t buf = new GlobalUint8Array(array, byteOffset);\n\t } else {\n\t buf = new GlobalUint8Array(array, byteOffset, length);\n\t }\n\n\t // Return an augmented `Uint8Array` instance\n\t Object.setPrototypeOf(buf, Buffer.prototype);\n\n\t return buf\n\t}\n\n\tfunction fromObject (obj) {\n\t if (Buffer.isBuffer(obj)) {\n\t const len = checked(obj.length) | 0;\n\t const buf = createBuffer(len);\n\n\t if (buf.length === 0) {\n\t return buf\n\t }\n\n\t obj.copy(buf, 0, 0, len);\n\t return buf\n\t }\n\n\t if (obj.length !== undefined) {\n\t if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n\t return createBuffer(0)\n\t }\n\t return fromArrayLike(obj)\n\t }\n\n\t if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n\t return fromArrayLike(obj.data)\n\t }\n\t}\n\n\tfunction checked (length) {\n\t // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n\t // length is NaN (which is otherwise coerced to zero.)\n\t if (length >= K_MAX_LENGTH) {\n\t throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n\t 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n\t }\n\t return length | 0\n\t}\n\n\tfunction SlowBuffer (length) {\n\t if (+length != length) { // eslint-disable-line eqeqeq\n\t length = 0;\n\t }\n\t return Buffer.alloc(+length)\n\t}\n\n\tBuffer.isBuffer = function isBuffer (b) {\n\t return b != null && b._isBuffer === true &&\n\t b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n\t};\n\n\tBuffer.compare = function compare (a, b) {\n\t if (isInstance(a, GlobalUint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n\t if (isInstance(b, GlobalUint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n\t if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n\t throw new TypeError(\n\t 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n\t )\n\t }\n\n\t if (a === b) return 0\n\n\t let x = a.length;\n\t let y = b.length;\n\n\t for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n\t if (a[i] !== b[i]) {\n\t x = a[i];\n\t y = b[i];\n\t break\n\t }\n\t }\n\n\t if (x < y) return -1\n\t if (y < x) return 1\n\t return 0\n\t};\n\n\tBuffer.isEncoding = function isEncoding (encoding) {\n\t switch (String(encoding).toLowerCase()) {\n\t case 'hex':\n\t case 'utf8':\n\t case 'utf-8':\n\t case 'ascii':\n\t case 'latin1':\n\t case 'binary':\n\t case 'base64':\n\t case 'ucs2':\n\t case 'ucs-2':\n\t case 'utf16le':\n\t case 'utf-16le':\n\t return true\n\t default:\n\t return false\n\t }\n\t};\n\n\tBuffer.concat = function concat (list, length) {\n\t if (!Array.isArray(list)) {\n\t throw new TypeError('\"list\" argument must be an Array of Buffers')\n\t }\n\n\t if (list.length === 0) {\n\t return Buffer.alloc(0)\n\t }\n\n\t let i;\n\t if (length === undefined) {\n\t length = 0;\n\t for (i = 0; i < list.length; ++i) {\n\t length += list[i].length;\n\t }\n\t }\n\n\t const buffer = Buffer.allocUnsafe(length);\n\t let pos = 0;\n\t for (i = 0; i < list.length; ++i) {\n\t let buf = list[i];\n\t if (isInstance(buf, GlobalUint8Array)) {\n\t if (pos + buf.length > buffer.length) {\n\t if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n\t buf.copy(buffer, pos);\n\t } else {\n\t GlobalUint8Array.prototype.set.call(\n\t buffer,\n\t buf,\n\t pos\n\t );\n\t }\n\t } else if (!Buffer.isBuffer(buf)) {\n\t throw new TypeError('\"list\" argument must be an Array of Buffers')\n\t } else {\n\t buf.copy(buffer, pos);\n\t }\n\t pos += buf.length;\n\t }\n\t return buffer\n\t};\n\n\tfunction byteLength (string, encoding) {\n\t if (Buffer.isBuffer(string)) {\n\t return string.length\n\t }\n\t if (GlobalArrayBuffer.isView(string) || isInstance(string, GlobalArrayBuffer)) {\n\t return string.byteLength\n\t }\n\t if (typeof string !== 'string') {\n\t throw new TypeError(\n\t 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n\t 'Received type ' + typeof string\n\t )\n\t }\n\n\t const len = string.length;\n\t const mustMatch = (arguments.length > 2 && arguments[2] === true);\n\t if (!mustMatch && len === 0) return 0\n\n\t // Use a for loop to avoid recursion\n\t let loweredCase = false;\n\t for (;;) {\n\t switch (encoding) {\n\t case 'ascii':\n\t case 'latin1':\n\t case 'binary':\n\t return len\n\t case 'utf8':\n\t case 'utf-8':\n\t return utf8ToBytes(string).length\n\t case 'ucs2':\n\t case 'ucs-2':\n\t case 'utf16le':\n\t case 'utf-16le':\n\t return len * 2\n\t case 'hex':\n\t return len >>> 1\n\t case 'base64':\n\t return base64ToBytes(string).length\n\t default:\n\t if (loweredCase) {\n\t return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n\t }\n\t encoding = ('' + encoding).toLowerCase();\n\t loweredCase = true;\n\t }\n\t }\n\t}\n\tBuffer.byteLength = byteLength;\n\n\tfunction slowToString (encoding, start, end) {\n\t let loweredCase = false;\n\n\t // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n\t // property of a typed array.\n\n\t // This behaves neither like String nor Uint8Array in that we set start/end\n\t // to their upper/lower bounds if the value passed is out of range.\n\t // undefined is handled specially as per ECMA-262 6th Edition,\n\t // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\t if (start === undefined || start < 0) {\n\t start = 0;\n\t }\n\t // Return early if start > this.length. Done here to prevent potential uint32\n\t // coercion fail below.\n\t if (start > this.length) {\n\t return ''\n\t }\n\n\t if (end === undefined || end > this.length) {\n\t end = this.length;\n\t }\n\n\t if (end <= 0) {\n\t return ''\n\t }\n\n\t // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n\t end >>>= 0;\n\t start >>>= 0;\n\n\t if (end <= start) {\n\t return ''\n\t }\n\n\t if (!encoding) encoding = 'utf8';\n\n\t while (true) {\n\t switch (encoding) {\n\t case 'hex':\n\t return hexSlice(this, start, end)\n\n\t case 'utf8':\n\t case 'utf-8':\n\t return utf8Slice(this, start, end)\n\n\t case 'ascii':\n\t return asciiSlice(this, start, end)\n\n\t case 'latin1':\n\t case 'binary':\n\t return latin1Slice(this, start, end)\n\n\t case 'base64':\n\t return base64Slice(this, start, end)\n\n\t case 'ucs2':\n\t case 'ucs-2':\n\t case 'utf16le':\n\t case 'utf-16le':\n\t return utf16leSlice(this, start, end)\n\n\t default:\n\t if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n\t encoding = (encoding + '').toLowerCase();\n\t loweredCase = true;\n\t }\n\t }\n\t}\n\n\t// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n\t// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n\t// reliably in a browserify context because there could be multiple different\n\t// copies of the 'buffer' package in use. This method works even for Buffer\n\t// instances that were created from another copy of the `buffer` package.\n\t// See: https://github.com/feross/buffer/issues/154\n\tBuffer.prototype._isBuffer = true;\n\n\tfunction swap (b, n, m) {\n\t const i = b[n];\n\t b[n] = b[m];\n\t b[m] = i;\n\t}\n\n\tBuffer.prototype.swap16 = function swap16 () {\n\t const len = this.length;\n\t if (len % 2 !== 0) {\n\t throw new RangeError('Buffer size must be a multiple of 16-bits')\n\t }\n\t for (let i = 0; i < len; i += 2) {\n\t swap(this, i, i + 1);\n\t }\n\t return this\n\t};\n\n\tBuffer.prototype.swap32 = function swap32 () {\n\t const len = this.length;\n\t if (len % 4 !== 0) {\n\t throw new RangeError('Buffer size must be a multiple of 32-bits')\n\t }\n\t for (let i = 0; i < len; i += 4) {\n\t swap(this, i, i + 3);\n\t swap(this, i + 1, i + 2);\n\t }\n\t return this\n\t};\n\n\tBuffer.prototype.swap64 = function swap64 () {\n\t const len = this.length;\n\t if (len % 8 !== 0) {\n\t throw new RangeError('Buffer size must be a multiple of 64-bits')\n\t }\n\t for (let i = 0; i < len; i += 8) {\n\t swap(this, i, i + 7);\n\t swap(this, i + 1, i + 6);\n\t swap(this, i + 2, i + 5);\n\t swap(this, i + 3, i + 4);\n\t }\n\t return this\n\t};\n\n\tBuffer.prototype.toString = function toString () {\n\t const length = this.length;\n\t if (length === 0) return ''\n\t if (arguments.length === 0) return utf8Slice(this, 0, length)\n\t return slowToString.apply(this, arguments)\n\t};\n\n\tBuffer.prototype.toLocaleString = Buffer.prototype.toString;\n\n\tBuffer.prototype.equals = function equals (b) {\n\t if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n\t if (this === b) return true\n\t return Buffer.compare(this, b) === 0\n\t};\n\n\tBuffer.prototype.inspect = function inspect () {\n\t let str = '';\n\t const max = exports.INSPECT_MAX_BYTES;\n\t str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim();\n\t if (this.length > max) str += ' ... ';\n\t return ''\n\t};\n\tif (customInspectSymbol) {\n\t Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n\t}\n\n\tBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n\t if (isInstance(target, GlobalUint8Array)) {\n\t target = Buffer.from(target, target.offset, target.byteLength);\n\t }\n\t if (!Buffer.isBuffer(target)) {\n\t throw new TypeError(\n\t 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n\t 'Received type ' + (typeof target)\n\t )\n\t }\n\n\t if (start === undefined) {\n\t start = 0;\n\t }\n\t if (end === undefined) {\n\t end = target ? target.length : 0;\n\t }\n\t if (thisStart === undefined) {\n\t thisStart = 0;\n\t }\n\t if (thisEnd === undefined) {\n\t thisEnd = this.length;\n\t }\n\n\t if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n\t throw new RangeError('out of range index')\n\t }\n\n\t if (thisStart >= thisEnd && start >= end) {\n\t return 0\n\t }\n\t if (thisStart >= thisEnd) {\n\t return -1\n\t }\n\t if (start >= end) {\n\t return 1\n\t }\n\n\t start >>>= 0;\n\t end >>>= 0;\n\t thisStart >>>= 0;\n\t thisEnd >>>= 0;\n\n\t if (this === target) return 0\n\n\t let x = thisEnd - thisStart;\n\t let y = end - start;\n\t const len = Math.min(x, y);\n\n\t const thisCopy = this.slice(thisStart, thisEnd);\n\t const targetCopy = target.slice(start, end);\n\n\t for (let i = 0; i < len; ++i) {\n\t if (thisCopy[i] !== targetCopy[i]) {\n\t x = thisCopy[i];\n\t y = targetCopy[i];\n\t break\n\t }\n\t }\n\n\t if (x < y) return -1\n\t if (y < x) return 1\n\t return 0\n\t};\n\n\t// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n\t// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n\t//\n\t// Arguments:\n\t// - buffer - a Buffer to search\n\t// - val - a string, Buffer, or number\n\t// - byteOffset - an index into `buffer`; will be clamped to an int32\n\t// - encoding - an optional encoding, relevant is val is a string\n\t// - dir - true for indexOf, false for lastIndexOf\n\tfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n\t // Empty buffer means no match\n\t if (buffer.length === 0) return -1\n\n\t // Normalize byteOffset\n\t if (typeof byteOffset === 'string') {\n\t encoding = byteOffset;\n\t byteOffset = 0;\n\t } else if (byteOffset > 0x7fffffff) {\n\t byteOffset = 0x7fffffff;\n\t } else if (byteOffset < -0x80000000) {\n\t byteOffset = -0x80000000;\n\t }\n\t byteOffset = +byteOffset; // Coerce to Number.\n\t if (numberIsNaN(byteOffset)) {\n\t // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n\t byteOffset = dir ? 0 : (buffer.length - 1);\n\t }\n\n\t // Normalize byteOffset: negative offsets start from the end of the buffer\n\t if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\t if (byteOffset >= buffer.length) {\n\t if (dir) return -1\n\t else byteOffset = buffer.length - 1;\n\t } else if (byteOffset < 0) {\n\t if (dir) byteOffset = 0;\n\t else return -1\n\t }\n\n\t // Normalize val\n\t if (typeof val === 'string') {\n\t val = Buffer.from(val, encoding);\n\t }\n\n\t // Finally, search either indexOf (if dir is true) or lastIndexOf\n\t if (Buffer.isBuffer(val)) {\n\t // Special case: looking for empty string/buffer always fails\n\t if (val.length === 0) {\n\t return -1\n\t }\n\t return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n\t } else if (typeof val === 'number') {\n\t val = val & 0xFF; // Search for a byte value [0-255]\n\t if (typeof GlobalUint8Array.prototype.indexOf === 'function') {\n\t if (dir) {\n\t return GlobalUint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n\t } else {\n\t return GlobalUint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n\t }\n\t }\n\t return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n\t }\n\n\t throw new TypeError('val must be string, number or Buffer')\n\t}\n\n\tfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n\t let indexSize = 1;\n\t let arrLength = arr.length;\n\t let valLength = val.length;\n\n\t if (encoding !== undefined) {\n\t encoding = String(encoding).toLowerCase();\n\t if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n\t encoding === 'utf16le' || encoding === 'utf-16le') {\n\t if (arr.length < 2 || val.length < 2) {\n\t return -1\n\t }\n\t indexSize = 2;\n\t arrLength /= 2;\n\t valLength /= 2;\n\t byteOffset /= 2;\n\t }\n\t }\n\n\t function read (buf, i) {\n\t if (indexSize === 1) {\n\t return buf[i]\n\t } else {\n\t return buf.readUInt16BE(i * indexSize)\n\t }\n\t }\n\n\t let i;\n\t if (dir) {\n\t let foundIndex = -1;\n\t for (i = byteOffset; i < arrLength; i++) {\n\t if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n\t if (foundIndex === -1) foundIndex = i;\n\t if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n\t } else {\n\t if (foundIndex !== -1) i -= i - foundIndex;\n\t foundIndex = -1;\n\t }\n\t }\n\t } else {\n\t if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\t for (i = byteOffset; i >= 0; i--) {\n\t let found = true;\n\t for (let j = 0; j < valLength; j++) {\n\t if (read(arr, i + j) !== read(val, j)) {\n\t found = false;\n\t break\n\t }\n\t }\n\t if (found) return i\n\t }\n\t }\n\n\t return -1\n\t}\n\n\tBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n\t return this.indexOf(val, byteOffset, encoding) !== -1\n\t};\n\n\tBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n\t return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n\t};\n\n\tBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n\t return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n\t};\n\n\tfunction hexWrite (buf, string, offset, length) {\n\t offset = Number(offset) || 0;\n\t const remaining = buf.length - offset;\n\t if (!length) {\n\t length = remaining;\n\t } else {\n\t length = Number(length);\n\t if (length > remaining) {\n\t length = remaining;\n\t }\n\t }\n\n\t const strLen = string.length;\n\n\t if (length > strLen / 2) {\n\t length = strLen / 2;\n\t }\n\t let i;\n\t for (i = 0; i < length; ++i) {\n\t const parsed = parseInt(string.substr(i * 2, 2), 16);\n\t if (numberIsNaN(parsed)) return i\n\t buf[offset + i] = parsed;\n\t }\n\t return i\n\t}\n\n\tfunction utf8Write (buf, string, offset, length) {\n\t return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n\t}\n\n\tfunction asciiWrite (buf, string, offset, length) {\n\t return blitBuffer(asciiToBytes(string), buf, offset, length)\n\t}\n\n\tfunction base64Write (buf, string, offset, length) {\n\t return blitBuffer(base64ToBytes(string), buf, offset, length)\n\t}\n\n\tfunction ucs2Write (buf, string, offset, length) {\n\t return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n\t}\n\n\tBuffer.prototype.write = function write (string, offset, length, encoding) {\n\t // Buffer#write(string)\n\t if (offset === undefined) {\n\t encoding = 'utf8';\n\t length = this.length;\n\t offset = 0;\n\t // Buffer#write(string, encoding)\n\t } else if (length === undefined && typeof offset === 'string') {\n\t encoding = offset;\n\t length = this.length;\n\t offset = 0;\n\t // Buffer#write(string, offset[, length][, encoding])\n\t } else if (isFinite(offset)) {\n\t offset = offset >>> 0;\n\t if (isFinite(length)) {\n\t length = length >>> 0;\n\t if (encoding === undefined) encoding = 'utf8';\n\t } else {\n\t encoding = length;\n\t length = undefined;\n\t }\n\t } else {\n\t throw new Error(\n\t 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n\t )\n\t }\n\n\t const remaining = this.length - offset;\n\t if (length === undefined || length > remaining) length = remaining;\n\n\t if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n\t throw new RangeError('Attempt to write outside buffer bounds')\n\t }\n\n\t if (!encoding) encoding = 'utf8';\n\n\t let loweredCase = false;\n\t for (;;) {\n\t switch (encoding) {\n\t case 'hex':\n\t return hexWrite(this, string, offset, length)\n\n\t case 'utf8':\n\t case 'utf-8':\n\t return utf8Write(this, string, offset, length)\n\n\t case 'ascii':\n\t case 'latin1':\n\t case 'binary':\n\t return asciiWrite(this, string, offset, length)\n\n\t case 'base64':\n\t // Warning: maxLength not taken into account in base64Write\n\t return base64Write(this, string, offset, length)\n\n\t case 'ucs2':\n\t case 'ucs-2':\n\t case 'utf16le':\n\t case 'utf-16le':\n\t return ucs2Write(this, string, offset, length)\n\n\t default:\n\t if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n\t encoding = ('' + encoding).toLowerCase();\n\t loweredCase = true;\n\t }\n\t }\n\t};\n\n\tBuffer.prototype.toJSON = function toJSON () {\n\t return {\n\t type: 'Buffer',\n\t data: Array.prototype.slice.call(this._arr || this, 0)\n\t }\n\t};\n\n\tfunction base64Slice (buf, start, end) {\n\t if (start === 0 && end === buf.length) {\n\t return base64.fromByteArray(buf)\n\t } else {\n\t return base64.fromByteArray(buf.slice(start, end))\n\t }\n\t}\n\n\tfunction utf8Slice (buf, start, end) {\n\t end = Math.min(buf.length, end);\n\t const res = [];\n\n\t let i = start;\n\t while (i < end) {\n\t const firstByte = buf[i];\n\t let codePoint = null;\n\t let bytesPerSequence = (firstByte > 0xEF)\n\t ? 4\n\t : (firstByte > 0xDF)\n\t ? 3\n\t : (firstByte > 0xBF)\n\t ? 2\n\t : 1;\n\n\t if (i + bytesPerSequence <= end) {\n\t let secondByte, thirdByte, fourthByte, tempCodePoint;\n\n\t switch (bytesPerSequence) {\n\t case 1:\n\t if (firstByte < 0x80) {\n\t codePoint = firstByte;\n\t }\n\t break\n\t case 2:\n\t secondByte = buf[i + 1];\n\t if ((secondByte & 0xC0) === 0x80) {\n\t tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n\t if (tempCodePoint > 0x7F) {\n\t codePoint = tempCodePoint;\n\t }\n\t }\n\t break\n\t case 3:\n\t secondByte = buf[i + 1];\n\t thirdByte = buf[i + 2];\n\t if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n\t tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n\t if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n\t codePoint = tempCodePoint;\n\t }\n\t }\n\t break\n\t case 4:\n\t secondByte = buf[i + 1];\n\t thirdByte = buf[i + 2];\n\t fourthByte = buf[i + 3];\n\t if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n\t tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n\t if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n\t codePoint = tempCodePoint;\n\t }\n\t }\n\t }\n\t }\n\n\t if (codePoint === null) {\n\t // we did not generate a valid codePoint so insert a\n\t // replacement char (U+FFFD) and advance only 1 byte\n\t codePoint = 0xFFFD;\n\t bytesPerSequence = 1;\n\t } else if (codePoint > 0xFFFF) {\n\t // encode to utf16 (surrogate pair dance)\n\t codePoint -= 0x10000;\n\t res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n\t codePoint = 0xDC00 | codePoint & 0x3FF;\n\t }\n\n\t res.push(codePoint);\n\t i += bytesPerSequence;\n\t }\n\n\t return decodeCodePointsArray(res)\n\t}\n\n\t// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n\t// the lowest limit is Chrome, with 0x10000 args.\n\t// We go 1 magnitude less, for safety\n\tconst MAX_ARGUMENTS_LENGTH = 0x1000;\n\n\tfunction decodeCodePointsArray (codePoints) {\n\t const len = codePoints.length;\n\t if (len <= MAX_ARGUMENTS_LENGTH) {\n\t return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n\t }\n\n\t // Decode in chunks to avoid \"call stack size exceeded\".\n\t let res = '';\n\t let i = 0;\n\t while (i < len) {\n\t res += String.fromCharCode.apply(\n\t String,\n\t codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n\t );\n\t }\n\t return res\n\t}\n\n\tfunction asciiSlice (buf, start, end) {\n\t let ret = '';\n\t end = Math.min(buf.length, end);\n\n\t for (let i = start; i < end; ++i) {\n\t ret += String.fromCharCode(buf[i] & 0x7F);\n\t }\n\t return ret\n\t}\n\n\tfunction latin1Slice (buf, start, end) {\n\t let ret = '';\n\t end = Math.min(buf.length, end);\n\n\t for (let i = start; i < end; ++i) {\n\t ret += String.fromCharCode(buf[i]);\n\t }\n\t return ret\n\t}\n\n\tfunction hexSlice (buf, start, end) {\n\t const len = buf.length;\n\n\t if (!start || start < 0) start = 0;\n\t if (!end || end < 0 || end > len) end = len;\n\n\t let out = '';\n\t for (let i = start; i < end; ++i) {\n\t out += hexSliceLookupTable[buf[i]];\n\t }\n\t return out\n\t}\n\n\tfunction utf16leSlice (buf, start, end) {\n\t const bytes = buf.slice(start, end);\n\t let res = '';\n\t // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n\t for (let i = 0; i < bytes.length - 1; i += 2) {\n\t res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256));\n\t }\n\t return res\n\t}\n\n\tBuffer.prototype.slice = function slice (start, end) {\n\t const len = this.length;\n\t start = ~~start;\n\t end = end === undefined ? len : ~~end;\n\n\t if (start < 0) {\n\t start += len;\n\t if (start < 0) start = 0;\n\t } else if (start > len) {\n\t start = len;\n\t }\n\n\t if (end < 0) {\n\t end += len;\n\t if (end < 0) end = 0;\n\t } else if (end > len) {\n\t end = len;\n\t }\n\n\t if (end < start) end = start;\n\n\t const newBuf = this.subarray(start, end);\n\t // Return an augmented `Uint8Array` instance\n\t Object.setPrototypeOf(newBuf, Buffer.prototype);\n\n\t return newBuf\n\t};\n\n\t/*\n\t * Need to make sure that buffer isn't trying to write out of bounds.\n\t */\n\tfunction checkOffset (offset, ext, length) {\n\t if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n\t if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n\t}\n\n\tBuffer.prototype.readUintLE =\n\tBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n\t offset = offset >>> 0;\n\t byteLength = byteLength >>> 0;\n\t if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n\t let val = this[offset];\n\t let mul = 1;\n\t let i = 0;\n\t while (++i < byteLength && (mul *= 0x100)) {\n\t val += this[offset + i] * mul;\n\t }\n\n\t return val\n\t};\n\n\tBuffer.prototype.readUintBE =\n\tBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n\t offset = offset >>> 0;\n\t byteLength = byteLength >>> 0;\n\t if (!noAssert) {\n\t checkOffset(offset, byteLength, this.length);\n\t }\n\n\t let val = this[offset + --byteLength];\n\t let mul = 1;\n\t while (byteLength > 0 && (mul *= 0x100)) {\n\t val += this[offset + --byteLength] * mul;\n\t }\n\n\t return val\n\t};\n\n\tBuffer.prototype.readUint8 =\n\tBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 1, this.length);\n\t return this[offset]\n\t};\n\n\tBuffer.prototype.readUint16LE =\n\tBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 2, this.length);\n\t return this[offset] | (this[offset + 1] << 8)\n\t};\n\n\tBuffer.prototype.readUint16BE =\n\tBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 2, this.length);\n\t return (this[offset] << 8) | this[offset + 1]\n\t};\n\n\tBuffer.prototype.readUint32LE =\n\tBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 4, this.length);\n\n\t return ((this[offset]) |\n\t (this[offset + 1] << 8) |\n\t (this[offset + 2] << 16)) +\n\t (this[offset + 3] * 0x1000000)\n\t};\n\n\tBuffer.prototype.readUint32BE =\n\tBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 4, this.length);\n\n\t return (this[offset] * 0x1000000) +\n\t ((this[offset + 1] << 16) |\n\t (this[offset + 2] << 8) |\n\t this[offset + 3])\n\t};\n\n\tBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n\t offset = offset >>> 0;\n\t validateNumber(offset, 'offset');\n\t const first = this[offset];\n\t const last = this[offset + 7];\n\t if (first === undefined || last === undefined) {\n\t boundsError(offset, this.length - 8);\n\t }\n\n\t const lo = first +\n\t this[++offset] * 2 ** 8 +\n\t this[++offset] * 2 ** 16 +\n\t this[++offset] * 2 ** 24;\n\n\t const hi = this[++offset] +\n\t this[++offset] * 2 ** 8 +\n\t this[++offset] * 2 ** 16 +\n\t last * 2 ** 24;\n\n\t return BigInt(lo) + (BigInt(hi) << BigInt(32))\n\t});\n\n\tBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n\t offset = offset >>> 0;\n\t validateNumber(offset, 'offset');\n\t const first = this[offset];\n\t const last = this[offset + 7];\n\t if (first === undefined || last === undefined) {\n\t boundsError(offset, this.length - 8);\n\t }\n\n\t const hi = first * 2 ** 24 +\n\t this[++offset] * 2 ** 16 +\n\t this[++offset] * 2 ** 8 +\n\t this[++offset];\n\n\t const lo = this[++offset] * 2 ** 24 +\n\t this[++offset] * 2 ** 16 +\n\t this[++offset] * 2 ** 8 +\n\t last;\n\n\t return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n\t});\n\n\tBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n\t offset = offset >>> 0;\n\t byteLength = byteLength >>> 0;\n\t if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n\t let val = this[offset];\n\t let mul = 1;\n\t let i = 0;\n\t while (++i < byteLength && (mul *= 0x100)) {\n\t val += this[offset + i] * mul;\n\t }\n\t mul *= 0x80;\n\n\t if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n\t return val\n\t};\n\n\tBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n\t offset = offset >>> 0;\n\t byteLength = byteLength >>> 0;\n\t if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n\t let i = byteLength;\n\t let mul = 1;\n\t let val = this[offset + --i];\n\t while (i > 0 && (mul *= 0x100)) {\n\t val += this[offset + --i] * mul;\n\t }\n\t mul *= 0x80;\n\n\t if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n\t return val\n\t};\n\n\tBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 1, this.length);\n\t if (!(this[offset] & 0x80)) return (this[offset])\n\t return ((0xff - this[offset] + 1) * -1)\n\t};\n\n\tBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 2, this.length);\n\t const val = this[offset] | (this[offset + 1] << 8);\n\t return (val & 0x8000) ? val | 0xFFFF0000 : val\n\t};\n\n\tBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 2, this.length);\n\t const val = this[offset + 1] | (this[offset] << 8);\n\t return (val & 0x8000) ? val | 0xFFFF0000 : val\n\t};\n\n\tBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 4, this.length);\n\n\t return (this[offset]) |\n\t (this[offset + 1] << 8) |\n\t (this[offset + 2] << 16) |\n\t (this[offset + 3] << 24)\n\t};\n\n\tBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 4, this.length);\n\n\t return (this[offset] << 24) |\n\t (this[offset + 1] << 16) |\n\t (this[offset + 2] << 8) |\n\t (this[offset + 3])\n\t};\n\n\tBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n\t offset = offset >>> 0;\n\t validateNumber(offset, 'offset');\n\t const first = this[offset];\n\t const last = this[offset + 7];\n\t if (first === undefined || last === undefined) {\n\t boundsError(offset, this.length - 8);\n\t }\n\n\t const val = this[offset + 4] +\n\t this[offset + 5] * 2 ** 8 +\n\t this[offset + 6] * 2 ** 16 +\n\t (last << 24); // Overflow\n\n\t return (BigInt(val) << BigInt(32)) +\n\t BigInt(first +\n\t this[++offset] * 2 ** 8 +\n\t this[++offset] * 2 ** 16 +\n\t this[++offset] * 2 ** 24)\n\t});\n\n\tBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n\t offset = offset >>> 0;\n\t validateNumber(offset, 'offset');\n\t const first = this[offset];\n\t const last = this[offset + 7];\n\t if (first === undefined || last === undefined) {\n\t boundsError(offset, this.length - 8);\n\t }\n\n\t const val = (first << 24) + // Overflow\n\t this[++offset] * 2 ** 16 +\n\t this[++offset] * 2 ** 8 +\n\t this[++offset];\n\n\t return (BigInt(val) << BigInt(32)) +\n\t BigInt(this[++offset] * 2 ** 24 +\n\t this[++offset] * 2 ** 16 +\n\t this[++offset] * 2 ** 8 +\n\t last)\n\t});\n\n\tBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 4, this.length);\n\t return ieee754$1.read(this, offset, true, 23, 4)\n\t};\n\n\tBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 4, this.length);\n\t return ieee754$1.read(this, offset, false, 23, 4)\n\t};\n\n\tBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 8, this.length);\n\t return ieee754$1.read(this, offset, true, 52, 8)\n\t};\n\n\tBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n\t offset = offset >>> 0;\n\t if (!noAssert) checkOffset(offset, 8, this.length);\n\t return ieee754$1.read(this, offset, false, 52, 8)\n\t};\n\n\tfunction checkInt (buf, value, offset, ext, max, min) {\n\t if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n\t if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n\t if (offset + ext > buf.length) throw new RangeError('Index out of range')\n\t}\n\n\tBuffer.prototype.writeUintLE =\n\tBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t byteLength = byteLength >>> 0;\n\t if (!noAssert) {\n\t const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n\t checkInt(this, value, offset, byteLength, maxBytes, 0);\n\t }\n\n\t let mul = 1;\n\t let i = 0;\n\t this[offset] = value & 0xFF;\n\t while (++i < byteLength && (mul *= 0x100)) {\n\t this[offset + i] = (value / mul) & 0xFF;\n\t }\n\n\t return offset + byteLength\n\t};\n\n\tBuffer.prototype.writeUintBE =\n\tBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t byteLength = byteLength >>> 0;\n\t if (!noAssert) {\n\t const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n\t checkInt(this, value, offset, byteLength, maxBytes, 0);\n\t }\n\n\t let i = byteLength - 1;\n\t let mul = 1;\n\t this[offset + i] = value & 0xFF;\n\t while (--i >= 0 && (mul *= 0x100)) {\n\t this[offset + i] = (value / mul) & 0xFF;\n\t }\n\n\t return offset + byteLength\n\t};\n\n\tBuffer.prototype.writeUint8 =\n\tBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n\t this[offset] = (value & 0xff);\n\t return offset + 1\n\t};\n\n\tBuffer.prototype.writeUint16LE =\n\tBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\t this[offset] = (value & 0xff);\n\t this[offset + 1] = (value >>> 8);\n\t return offset + 2\n\t};\n\n\tBuffer.prototype.writeUint16BE =\n\tBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\t this[offset] = (value >>> 8);\n\t this[offset + 1] = (value & 0xff);\n\t return offset + 2\n\t};\n\n\tBuffer.prototype.writeUint32LE =\n\tBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\t this[offset + 3] = (value >>> 24);\n\t this[offset + 2] = (value >>> 16);\n\t this[offset + 1] = (value >>> 8);\n\t this[offset] = (value & 0xff);\n\t return offset + 4\n\t};\n\n\tBuffer.prototype.writeUint32BE =\n\tBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\t this[offset] = (value >>> 24);\n\t this[offset + 1] = (value >>> 16);\n\t this[offset + 2] = (value >>> 8);\n\t this[offset + 3] = (value & 0xff);\n\t return offset + 4\n\t};\n\n\tfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n\t checkIntBI(value, min, max, buf, offset, 7);\n\n\t let lo = Number(value & BigInt(0xffffffff));\n\t buf[offset++] = lo;\n\t lo = lo >> 8;\n\t buf[offset++] = lo;\n\t lo = lo >> 8;\n\t buf[offset++] = lo;\n\t lo = lo >> 8;\n\t buf[offset++] = lo;\n\t let hi = Number(value >> BigInt(32) & BigInt(0xffffffff));\n\t buf[offset++] = hi;\n\t hi = hi >> 8;\n\t buf[offset++] = hi;\n\t hi = hi >> 8;\n\t buf[offset++] = hi;\n\t hi = hi >> 8;\n\t buf[offset++] = hi;\n\t return offset\n\t}\n\n\tfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n\t checkIntBI(value, min, max, buf, offset, 7);\n\n\t let lo = Number(value & BigInt(0xffffffff));\n\t buf[offset + 7] = lo;\n\t lo = lo >> 8;\n\t buf[offset + 6] = lo;\n\t lo = lo >> 8;\n\t buf[offset + 5] = lo;\n\t lo = lo >> 8;\n\t buf[offset + 4] = lo;\n\t let hi = Number(value >> BigInt(32) & BigInt(0xffffffff));\n\t buf[offset + 3] = hi;\n\t hi = hi >> 8;\n\t buf[offset + 2] = hi;\n\t hi = hi >> 8;\n\t buf[offset + 1] = hi;\n\t hi = hi >> 8;\n\t buf[offset] = hi;\n\t return offset + 8\n\t}\n\n\tBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n\t return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n\t});\n\n\tBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n\t return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n\t});\n\n\tBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) {\n\t const limit = Math.pow(2, (8 * byteLength) - 1);\n\n\t checkInt(this, value, offset, byteLength, limit - 1, -limit);\n\t }\n\n\t let i = 0;\n\t let mul = 1;\n\t let sub = 0;\n\t this[offset] = value & 0xFF;\n\t while (++i < byteLength && (mul *= 0x100)) {\n\t if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n\t sub = 1;\n\t }\n\t this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n\t }\n\n\t return offset + byteLength\n\t};\n\n\tBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) {\n\t const limit = Math.pow(2, (8 * byteLength) - 1);\n\n\t checkInt(this, value, offset, byteLength, limit - 1, -limit);\n\t }\n\n\t let i = byteLength - 1;\n\t let mul = 1;\n\t let sub = 0;\n\t this[offset + i] = value & 0xFF;\n\t while (--i >= 0 && (mul *= 0x100)) {\n\t if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n\t sub = 1;\n\t }\n\t this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n\t }\n\n\t return offset + byteLength\n\t};\n\n\tBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n\t if (value < 0) value = 0xff + value + 1;\n\t this[offset] = (value & 0xff);\n\t return offset + 1\n\t};\n\n\tBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\t this[offset] = (value & 0xff);\n\t this[offset + 1] = (value >>> 8);\n\t return offset + 2\n\t};\n\n\tBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\t this[offset] = (value >>> 8);\n\t this[offset + 1] = (value & 0xff);\n\t return offset + 2\n\t};\n\n\tBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n\t this[offset] = (value & 0xff);\n\t this[offset + 1] = (value >>> 8);\n\t this[offset + 2] = (value >>> 16);\n\t this[offset + 3] = (value >>> 24);\n\t return offset + 4\n\t};\n\n\tBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n\t if (value < 0) value = 0xffffffff + value + 1;\n\t this[offset] = (value >>> 24);\n\t this[offset + 1] = (value >>> 16);\n\t this[offset + 2] = (value >>> 8);\n\t this[offset + 3] = (value & 0xff);\n\t return offset + 4\n\t};\n\n\tBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n\t return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n\t});\n\n\tBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n\t return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n\t});\n\n\tfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n\t if (offset + ext > buf.length) throw new RangeError('Index out of range')\n\t if (offset < 0) throw new RangeError('Index out of range')\n\t}\n\n\tfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) {\n\t checkIEEE754(buf, value, offset, 4);\n\t }\n\t ieee754$1.write(buf, value, offset, littleEndian, 23, 4);\n\t return offset + 4\n\t}\n\n\tBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n\t return writeFloat(this, value, offset, true, noAssert)\n\t};\n\n\tBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n\t return writeFloat(this, value, offset, false, noAssert)\n\t};\n\n\tfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n\t value = +value;\n\t offset = offset >>> 0;\n\t if (!noAssert) {\n\t checkIEEE754(buf, value, offset, 8);\n\t }\n\t ieee754$1.write(buf, value, offset, littleEndian, 52, 8);\n\t return offset + 8\n\t}\n\n\tBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n\t return writeDouble(this, value, offset, true, noAssert)\n\t};\n\n\tBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n\t return writeDouble(this, value, offset, false, noAssert)\n\t};\n\n\t// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\tBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n\t if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n\t if (!start) start = 0;\n\t if (!end && end !== 0) end = this.length;\n\t if (targetStart >= target.length) targetStart = target.length;\n\t if (!targetStart) targetStart = 0;\n\t if (end > 0 && end < start) end = start;\n\n\t // Copy 0 bytes; we're done\n\t if (end === start) return 0\n\t if (target.length === 0 || this.length === 0) return 0\n\n\t // Fatal error conditions\n\t if (targetStart < 0) {\n\t throw new RangeError('targetStart out of bounds')\n\t }\n\t if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n\t if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n\t // Are we oob?\n\t if (end > this.length) end = this.length;\n\t if (target.length - targetStart < end - start) {\n\t end = target.length - targetStart + start;\n\t }\n\n\t const len = end - start;\n\n\t if (this === target && typeof GlobalUint8Array.prototype.copyWithin === 'function') {\n\t // Use built-in when available, missing from IE11\n\t this.copyWithin(targetStart, start, end);\n\t } else {\n\t GlobalUint8Array.prototype.set.call(\n\t target,\n\t this.subarray(start, end),\n\t targetStart\n\t );\n\t }\n\n\t return len\n\t};\n\n\t// Usage:\n\t// buffer.fill(number[, offset[, end]])\n\t// buffer.fill(buffer[, offset[, end]])\n\t// buffer.fill(string[, offset[, end]][, encoding])\n\tBuffer.prototype.fill = function fill (val, start, end, encoding) {\n\t // Handle string cases:\n\t if (typeof val === 'string') {\n\t if (typeof start === 'string') {\n\t encoding = start;\n\t start = 0;\n\t end = this.length;\n\t } else if (typeof end === 'string') {\n\t encoding = end;\n\t end = this.length;\n\t }\n\t if (encoding !== undefined && typeof encoding !== 'string') {\n\t throw new TypeError('encoding must be a string')\n\t }\n\t if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n\t throw new TypeError('Unknown encoding: ' + encoding)\n\t }\n\t if (val.length === 1) {\n\t const code = val.charCodeAt(0);\n\t if ((encoding === 'utf8' && code < 128) ||\n\t encoding === 'latin1') {\n\t // Fast path: If `val` fits into a single byte, use that numeric value.\n\t val = code;\n\t }\n\t }\n\t } else if (typeof val === 'number') {\n\t val = val & 255;\n\t } else if (typeof val === 'boolean') {\n\t val = Number(val);\n\t }\n\n\t // Invalid ranges are not set to a default, so can range check early.\n\t if (start < 0 || this.length < start || this.length < end) {\n\t throw new RangeError('Out of range index')\n\t }\n\n\t if (end <= start) {\n\t return this\n\t }\n\n\t start = start >>> 0;\n\t end = end === undefined ? this.length : end >>> 0;\n\n\t if (!val) val = 0;\n\n\t let i;\n\t if (typeof val === 'number') {\n\t for (i = start; i < end; ++i) {\n\t this[i] = val;\n\t }\n\t } else {\n\t const bytes = Buffer.isBuffer(val)\n\t ? val\n\t : Buffer.from(val, encoding);\n\t const len = bytes.length;\n\t if (len === 0) {\n\t throw new TypeError('The value \"' + val +\n\t '\" is invalid for argument \"value\"')\n\t }\n\t for (i = 0; i < end - start; ++i) {\n\t this[i + start] = bytes[i % len];\n\t }\n\t }\n\n\t return this\n\t};\n\n\t// CUSTOM ERRORS\n\t// =============\n\n\t// Simplified versions from Node, changed for Buffer-only usage\n\tconst errors = {};\n\tfunction E (sym, getMessage, Base) {\n\t errors[sym] = class NodeError extends Base {\n\t constructor () {\n\t super();\n\n\t Object.defineProperty(this, 'message', {\n\t value: getMessage.apply(this, arguments),\n\t writable: true,\n\t configurable: true\n\t });\n\n\t // Add the error code to the name to include it in the stack trace.\n\t this.name = `${this.name} [${sym}]`;\n\t // Access the stack to generate the error message including the error code\n\t // from the name.\n\t this.stack; // eslint-disable-line no-unused-expressions\n\t // Reset the name to the actual name.\n\t delete this.name;\n\t }\n\n\t get code () {\n\t return sym\n\t }\n\n\t set code (value) {\n\t Object.defineProperty(this, 'code', {\n\t configurable: true,\n\t enumerable: true,\n\t value,\n\t writable: true\n\t });\n\t }\n\n\t toString () {\n\t return `${this.name} [${sym}]: ${this.message}`\n\t }\n\t };\n\t}\n\n\tE('ERR_BUFFER_OUT_OF_BOUNDS',\n\t function (name) {\n\t if (name) {\n\t return `${name} is outside of buffer bounds`\n\t }\n\n\t return 'Attempt to access memory outside buffer bounds'\n\t }, RangeError);\n\tE('ERR_INVALID_ARG_TYPE',\n\t function (name, actual) {\n\t return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n\t }, TypeError);\n\tE('ERR_OUT_OF_RANGE',\n\t function (str, range, input) {\n\t let msg = `The value of \"${str}\" is out of range.`;\n\t let received = input;\n\t if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n\t received = addNumericalSeparator(String(input));\n\t } else if (typeof input === 'bigint') {\n\t received = String(input);\n\t if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n\t received = addNumericalSeparator(received);\n\t }\n\t received += 'n';\n\t }\n\t msg += ` It must be ${range}. Received ${received}`;\n\t return msg\n\t }, RangeError);\n\n\tfunction addNumericalSeparator (val) {\n\t let res = '';\n\t let i = val.length;\n\t const start = val[0] === '-' ? 1 : 0;\n\t for (; i >= start + 4; i -= 3) {\n\t res = `_${val.slice(i - 3, i)}${res}`;\n\t }\n\t return `${val.slice(0, i)}${res}`\n\t}\n\n\t// CHECK FUNCTIONS\n\t// ===============\n\n\tfunction checkBounds (buf, offset, byteLength) {\n\t validateNumber(offset, 'offset');\n\t if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n\t boundsError(offset, buf.length - (byteLength + 1));\n\t }\n\t}\n\n\tfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n\t if (value > max || value < min) {\n\t const n = typeof min === 'bigint' ? 'n' : '';\n\t let range;\n\t if (byteLength > 3) {\n\t if (min === 0 || min === BigInt(0)) {\n\t range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`;\n\t } else {\n\t range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n\t `${(byteLength + 1) * 8 - 1}${n}`;\n\t }\n\t } else {\n\t range = `>= ${min}${n} and <= ${max}${n}`;\n\t }\n\t throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n\t }\n\t checkBounds(buf, offset, byteLength);\n\t}\n\n\tfunction validateNumber (value, name) {\n\t if (typeof value !== 'number') {\n\t throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n\t }\n\t}\n\n\tfunction boundsError (value, length, type) {\n\t if (Math.floor(value) !== value) {\n\t validateNumber(value, type);\n\t throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n\t }\n\n\t if (length < 0) {\n\t throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n\t }\n\n\t throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n\t `>= ${type ? 1 : 0} and <= ${length}`,\n\t value)\n\t}\n\n\t// HELPER FUNCTIONS\n\t// ================\n\n\tconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\n\n\tfunction base64clean (str) {\n\t // Node takes equal signs as end of the Base64 encoding\n\t str = str.split('=')[0];\n\t // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n\t str = str.trim().replace(INVALID_BASE64_RE, '');\n\t // Node converts strings with length < 2 to ''\n\t if (str.length < 2) return ''\n\t // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\t while (str.length % 4 !== 0) {\n\t str = str + '=';\n\t }\n\t return str\n\t}\n\n\tfunction utf8ToBytes (string, units) {\n\t units = units || Infinity;\n\t let codePoint;\n\t const length = string.length;\n\t let leadSurrogate = null;\n\t const bytes = [];\n\n\t for (let i = 0; i < length; ++i) {\n\t codePoint = string.charCodeAt(i);\n\n\t // is surrogate component\n\t if (codePoint > 0xD7FF && codePoint < 0xE000) {\n\t // last char was a lead\n\t if (!leadSurrogate) {\n\t // no lead yet\n\t if (codePoint > 0xDBFF) {\n\t // unexpected trail\n\t if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n\t continue\n\t } else if (i + 1 === length) {\n\t // unpaired lead\n\t if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n\t continue\n\t }\n\n\t // valid lead\n\t leadSurrogate = codePoint;\n\n\t continue\n\t }\n\n\t // 2 leads in a row\n\t if (codePoint < 0xDC00) {\n\t if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n\t leadSurrogate = codePoint;\n\t continue\n\t }\n\n\t // valid surrogate pair\n\t codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n\t } else if (leadSurrogate) {\n\t // valid bmp char, but last char was a lead\n\t if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n\t }\n\n\t leadSurrogate = null;\n\n\t // encode utf8\n\t if (codePoint < 0x80) {\n\t if ((units -= 1) < 0) break\n\t bytes.push(codePoint);\n\t } else if (codePoint < 0x800) {\n\t if ((units -= 2) < 0) break\n\t bytes.push(\n\t codePoint >> 0x6 | 0xC0,\n\t codePoint & 0x3F | 0x80\n\t );\n\t } else if (codePoint < 0x10000) {\n\t if ((units -= 3) < 0) break\n\t bytes.push(\n\t codePoint >> 0xC | 0xE0,\n\t codePoint >> 0x6 & 0x3F | 0x80,\n\t codePoint & 0x3F | 0x80\n\t );\n\t } else if (codePoint < 0x110000) {\n\t if ((units -= 4) < 0) break\n\t bytes.push(\n\t codePoint >> 0x12 | 0xF0,\n\t codePoint >> 0xC & 0x3F | 0x80,\n\t codePoint >> 0x6 & 0x3F | 0x80,\n\t codePoint & 0x3F | 0x80\n\t );\n\t } else {\n\t throw new Error('Invalid code point')\n\t }\n\t }\n\n\t return bytes\n\t}\n\n\tfunction asciiToBytes (str) {\n\t const byteArray = [];\n\t for (let i = 0; i < str.length; ++i) {\n\t // Node's code seems to be doing this and not & 0x7F..\n\t byteArray.push(str.charCodeAt(i) & 0xFF);\n\t }\n\t return byteArray\n\t}\n\n\tfunction utf16leToBytes (str, units) {\n\t let c, hi, lo;\n\t const byteArray = [];\n\t for (let i = 0; i < str.length; ++i) {\n\t if ((units -= 2) < 0) break\n\n\t c = str.charCodeAt(i);\n\t hi = c >> 8;\n\t lo = c % 256;\n\t byteArray.push(lo);\n\t byteArray.push(hi);\n\t }\n\n\t return byteArray\n\t}\n\n\tfunction base64ToBytes (str) {\n\t return base64.toByteArray(base64clean(str))\n\t}\n\n\tfunction blitBuffer (src, dst, offset, length) {\n\t let i;\n\t for (i = 0; i < length; ++i) {\n\t if ((i + offset >= dst.length) || (i >= src.length)) break\n\t dst[i + offset] = src[i];\n\t }\n\t return i\n\t}\n\n\t// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n\t// the `instanceof` check but they should be treated as of that type.\n\t// See: https://github.com/feross/buffer/issues/166\n\tfunction isInstance (obj, type) {\n\t return obj instanceof type ||\n\t (obj != null && obj.constructor != null && obj.constructor.name != null &&\n\t obj.constructor.name === type.name)\n\t}\n\tfunction numberIsNaN (obj) {\n\t // For IE11 support\n\t return obj !== obj // eslint-disable-line no-self-compare\n\t}\n\n\t// Create lookup table for `toString('hex')`\n\t// See: https://github.com/feross/buffer/issues/219\n\tconst hexSliceLookupTable = (function () {\n\t const alphabet = '0123456789abcdef';\n\t const table = new Array(256);\n\t for (let i = 0; i < 16; ++i) {\n\t const i16 = i * 16;\n\t for (let j = 0; j < 16; ++j) {\n\t table[i16 + j] = alphabet[i] + alphabet[j];\n\t }\n\t }\n\t return table\n\t})();\n\n\t// Return not function with Error if BigInt not supported\n\tfunction defineBigIntMethod (fn) {\n\t return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n\t}\n\n\tfunction BufferBigIntNotDefined () {\n\t throw new Error('BigInt not supported')\n\t} \n} (buffer));\n\nconst Buffer = buffer.Buffer;\n\nexports.Blob = buffer.Blob;\nexports.BlobOptions = buffer.BlobOptions;\nexports.Buffer = buffer.Buffer;\nexports.File = buffer.File;\nexports.FileOptions = buffer.FileOptions;\nexports.INSPECT_MAX_BYTES = buffer.INSPECT_MAX_BYTES;\nexports.SlowBuffer = buffer.SlowBuffer;\nexports.TranscodeEncoding = buffer.TranscodeEncoding;\nexports.atob = buffer.atob;\nexports.btoa = buffer.btoa;\nexports.constants = buffer.constants;\nexports.default = Buffer;\nexports.isAscii = buffer.isAscii;\nexports.isUtf8 = buffer.isUtf8;\nexports.kMaxLength = buffer.kMaxLength;\nexports.kStringMaxLength = buffer.kStringMaxLength;\nexports.resolveObjectURL = buffer.resolveObjectURL;\nexports.transcode = buffer.transcode;\n//# sourceMappingURL=index.cjs.map\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (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}\n","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\nvar test = {\n\t__proto__: null,\n\tfoo: {}\n};\n\nvar $Object = Object;\n\n/** @type {import('.')} */\nmodule.exports = function hasProto() {\n\t// @ts-expect-error: TS errors on an inherited property for some reason\n\treturn { __proto__: test }.foo === test.foo\n\t\t&& !(test instanceof $Object);\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar undefined;\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\n/** @type {import('.')} */\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = require('es-errors/type');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = require('es-define-property');\nvar $max = GetIntrinsic('%Math.max%');\n\nmodule.exports = function callBind(originalFunction) {\n\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = [\n\t'Float32Array',\n\t'Float64Array',\n\t'Int8Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'BigInt64Array',\n\t'BigUint64Array'\n];\n","'use strict';\n\nvar possibleNames = require('possible-typed-array-names');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\n/** @type {import('.')} */\nmodule.exports = function availableTypedArrays() {\n\tvar /** @type {ReturnType} */ out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\t// @ts-expect-error\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bind/callBound');\nvar gOPD = require('gopd');\n\n/** @type {(O: object) => string} */\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\n\n/** @type {(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {(receiver: import('.').TypedArray) => string | typeof Uint8Array.prototype.slice.call | typeof Uint8Array.prototype.set.call} Getter */\n/** @type {{ [k in `\\$${import('.').TypedArrayName}`]?: Getter } & { __proto__: null }} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(descriptor.get);\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(fn);\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = $slice(typedArray, 1);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, Getter>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: typeof cache, name: `\\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = $slice(name, 1);\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\t/** @type {string} */\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\n/** @type {import('.')} */\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","/*global module, process*/\nvar Buffer = require('safe-buffer').Buffer;\nvar Stream = require('stream');\nvar util = require('util');\n\nfunction DataStream(data) {\n this.buffer = null;\n this.writable = true;\n this.readable = true;\n\n // No input\n if (!data) {\n this.buffer = Buffer.alloc(0);\n return this;\n }\n\n // Stream\n if (typeof data.pipe === 'function') {\n this.buffer = Buffer.alloc(0);\n data.pipe(this);\n return this;\n }\n\n // Buffer or String\n // or Object (assumedly a passworded key)\n if (data.length || typeof data === 'object') {\n this.buffer = data;\n this.writable = false;\n process.nextTick(function () {\n this.emit('end', data);\n this.readable = false;\n this.emit('close');\n }.bind(this));\n return this;\n }\n\n throw new TypeError('Unexpected data type ('+ typeof data + ')');\n}\nutil.inherits(DataStream, Stream);\n\nDataStream.prototype.write = function write(data) {\n this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]);\n this.emit('data', data);\n};\n\nDataStream.prototype.end = function end(data) {\n if (data)\n this.write(data);\n this.emit('end', data);\n this.emit('close');\n this.writable = false;\n this.readable = false;\n};\n\nmodule.exports = DataStream;\n","/*jshint node:true */\n'use strict';\nvar Buffer = require('buffer').Buffer; // browserify\nvar SlowBuffer = require('buffer').SlowBuffer;\n\nmodule.exports = bufferEq;\n\nfunction bufferEq(a, b) {\n\n // shortcutting on type is necessary for correctness\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n return false;\n }\n\n // buffer sizes should be well-known information, so despite this\n // shortcutting, it doesn't leak any information about the *contents* of the\n // buffers.\n if (a.length !== b.length) {\n return false;\n }\n\n var c = 0;\n for (var i = 0; i < a.length; i++) {\n /*jshint bitwise:false */\n c |= a[i] ^ b[i]; // XOR\n }\n return c === 0;\n}\n\nbufferEq.install = function() {\n Buffer.prototype.equal = SlowBuffer.prototype.equal = function equal(that) {\n return bufferEq(this, that);\n };\n};\n\nvar origBufEqual = Buffer.prototype.equal;\nvar origSlowBufEqual = SlowBuffer.prototype.equal;\nbufferEq.restore = function() {\n Buffer.prototype.equal = origBufEqual;\n SlowBuffer.prototype.equal = origSlowBufEqual;\n};\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n if (this.padding === false) {\n return false;\n }\n\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n if (this.padding === false) {\n return buffer;\n }\n\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\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","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","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\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 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","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 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 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","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')\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 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","// 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 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 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","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\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 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 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","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 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 // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\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 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 r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\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 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 BN.prototype.inspect = 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.modn(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);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\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 this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\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] & (1 << wbit)) >>> wbit;\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 var fftm = new FFTM();\n return fftm.mulp(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 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 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.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(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.modn = function modn (num) {\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 acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\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 return this.strip();\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 BN v4 instance\n r.strip();\n } else {\n // r is 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 return a.umod(this.m)._forceRed(this);\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","(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 // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\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 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 r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\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 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 BN.prototype.inspect = 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.modn(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);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\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 this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\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] & (1 << wbit)) >>> wbit;\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 var fftm = new FFTM();\n return fftm.mulp(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 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 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.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(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.modn = function modn (num) {\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 acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\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 return this.strip();\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 BN v4 instance\n r.strip();\n } else {\n // r is 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 return a.umod(this.m)._forceRed(this);\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 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","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","module.exports = require('events').EventEmitter;\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\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 off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n 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","(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 // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\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 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 r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\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 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 BN.prototype.inspect = 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.modn(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);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\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 this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\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] & (1 << wbit)) >>> wbit;\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 var fftm = new FFTM();\n return fftm.mulp(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 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 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.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(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.modn = function modn (num) {\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 acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\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 return this.strip();\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 BN v4 instance\n r.strip();\n } else {\n // r is 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 return a.umod(this.m)._forceRed(this);\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","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n var i;\n for (i = 0; i < naf.length; i += 1) {\n naf[i] = 0;\n }\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n if(buf[p.place] === 0x00) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size');\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {\n return false;\n }\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\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 // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\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 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 r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\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 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 BN.prototype.inspect = 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.modn(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);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\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 this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\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] & (1 << wbit)) >>> wbit;\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 var fftm = new FFTM();\n return fftm.mulp(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 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 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.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(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.modn = function modn (num) {\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 acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\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 return this.strip();\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 BN v4 instance\n r.strip();\n } else {\n // r is 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 return a.umod(this.m)._forceRed(this);\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 indexOf = function (xs, item) {\n if (xs.indexOf) return xs.indexOf(item);\n else for (var i = 0; i < xs.length; i++) {\n if (xs[i] === item) return i;\n }\n return -1;\n};\nvar Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar defineProp = (function() {\n try {\n Object.defineProperty({}, '_', {});\n return function(obj, name, value) {\n Object.defineProperty(obj, name, {\n writable: true,\n enumerable: false,\n configurable: true,\n value: value\n })\n };\n } catch(e) {\n return function(obj, name, value) {\n obj[name] = value;\n };\n }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n if (!(context instanceof Context)) {\n throw new TypeError(\"needs a 'context' argument.\");\n }\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n \n document.body.appendChild(iframe);\n \n var win = iframe.contentWindow;\n var wEval = win.eval, wExecScript = win.execScript;\n\n if (!wEval && wExecScript) {\n // win.eval() magically appears when this is called in IE:\n wExecScript.call(win, 'null');\n wEval = win.eval;\n }\n \n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n forEach(globals, function (key) {\n if (context[key]) {\n win[key] = context[key];\n }\n });\n \n var winKeys = Object_keys(win);\n\n var res = wEval.call(win, this.code);\n \n forEach(Object_keys(win), function (key) {\n // Avoid copying circular objects like `top` and `window` by only\n // updating existing context properties or new properties in the `win`\n // that was only introduced after the eval.\n if (key in context || indexOf(winKeys, key) === -1) {\n context[key] = win[key];\n }\n });\n\n forEach(globals, function (key) {\n if (!(key in context)) {\n defineProp(context, key, win[key]);\n }\n });\n \n document.body.removeChild(iframe);\n \n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n var ctx = Script.createContext(context);\n var res = this.runInContext(ctx);\n\n if (context) {\n forEach(Object_keys(ctx), function (key) {\n context[key] = ctx[key];\n });\n }\n\n return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.isContext = function (context) {\n return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n var copy = new Context();\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n });\n }\n return copy;\n};\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict';\n\nvar asn = require('asn1.js');\n\nvar Time = asn.define('Time', function () {\n\tthis.choice({\n\t\tutcTime: this.utctime(),\n\t\tgeneralTime: this.gentime()\n\t});\n});\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n\tthis.seq().obj(\n\t\tthis.key('type').objid(),\n\t\tthis.key('value').any()\n\t);\n});\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('parameters').optional(),\n\t\tthis.key('curve').objid().optional()\n\t);\n});\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n\tthis.setof(AttributeTypeValue);\n});\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n\tthis.seqof(RelativeDistinguishedName);\n});\n\nvar Name = asn.define('Name', function () {\n\tthis.choice({\n\t\trdnSequence: this.use(RDNSequence)\n\t});\n});\n\nvar Validity = asn.define('Validity', function () {\n\tthis.seq().obj(\n\t\tthis.key('notBefore').use(Time),\n\t\tthis.key('notAfter').use(Time)\n\t);\n});\n\nvar Extension = asn.define('Extension', function () {\n\tthis.seq().obj(\n\t\tthis.key('extnID').objid(),\n\t\tthis.key('critical').bool().def(false),\n\t\tthis.key('extnValue').octstr()\n\t);\n});\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('version').explicit(0)['int']().optional(),\n\t\tthis.key('serialNumber')['int'](),\n\t\tthis.key('signature').use(AlgorithmIdentifier),\n\t\tthis.key('issuer').use(Name),\n\t\tthis.key('validity').use(Validity),\n\t\tthis.key('subject').use(Name),\n\t\tthis.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n\t\tthis.key('issuerUniqueID').implicit(1).bitstr().optional(),\n\t\tthis.key('subjectUniqueID').implicit(2).bitstr().optional(),\n\t\tthis.key('extensions').explicit(3).seqof(Extension).optional()\n\t);\n});\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('tbsCertificate').use(TBSCertificate),\n\t\tthis.key('signatureAlgorithm').use(AlgorithmIdentifier),\n\t\tthis.key('signatureValue').bitstr()\n\t);\n});\n\nmodule.exports = X509Certificate;\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int'](),\n\t\tthis.key('privateExponent')['int'](),\n\t\tthis.key('prime1')['int'](),\n\t\tthis.key('prime2')['int'](),\n\t\tthis.key('exponent1')['int'](),\n\t\tthis.key('exponent2')['int'](),\n\t\tthis.key('coefficient')['int']()\n\t);\n});\nexports.RSAPrivateKey = RSAPrivateKey;\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int']()\n\t);\n});\nexports.RSAPublicKey = RSAPublicKey;\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('none').null_().optional(),\n\t\tthis.key('curve').objid().optional(),\n\t\tthis.key('params').seq().obj(\n\t\t\tthis.key('p')['int'](),\n\t\t\tthis.key('q')['int'](),\n\t\t\tthis.key('g')['int']()\n\t\t).optional()\n\t);\n});\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\nexports.PublicKey = PublicKey;\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').seq().obj(\n\t\t\tthis.key('id').objid(),\n\t\t\tthis.key('decrypt').seq().obj(\n\t\t\t\tthis.key('kde').seq().obj(\n\t\t\t\t\tthis.key('id').objid(),\n\t\t\t\t\tthis.key('kdeparams').seq().obj(\n\t\t\t\t\t\tthis.key('salt').octstr(),\n\t\t\t\t\t\tthis.key('iters')['int']()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tthis.key('cipher').seq().obj(\n\t\t\t\t\tthis.key('algo').objid(),\n\t\t\t\t\tthis.key('iv').octstr()\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('p')['int'](),\n\t\tthis.key('q')['int'](),\n\t\tthis.key('g')['int'](),\n\t\tthis.key('pub_key')['int'](),\n\t\tthis.key('priv_key')['int']()\n\t);\n});\nexports.DSAPrivateKey = DSAPrivateKey;\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n\tthis['int']();\n});\n\nvar ECParameters = asn1.define('ECParameters', function () {\n\tthis.choice({\n\t\tnamedCurve: this.objid()\n\t});\n});\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('privateKey').octstr(),\n\t\tthis.key('parameters').optional().explicit(0).use(ECParameters),\n\t\tthis.key('publicKey').optional().explicit(1).bitstr()\n\t);\n});\nexports.ECPrivateKey = ECPrivateKey;\n\nexports.signature = asn1.define('signature', function () {\n\tthis.seq().obj(\n\t\tthis.key('r')['int'](),\n\t\tthis.key('s')['int']()\n\t);\n});\n","'use strict';\n\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m;\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m;\nvar evp = require('evp_bytestokey');\nvar ciphers = require('browserify-aes');\nvar Buffer = require('safe-buffer').Buffer;\nmodule.exports = function (okey, password) {\n\tvar key = okey.toString();\n\tvar match = key.match(findProc);\n\tvar decrypted;\n\tif (!match) {\n\t\tvar match2 = key.match(fullRegex);\n\t\tdecrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n\t} else {\n\t\tvar suite = 'aes' + match[1];\n\t\tvar iv = Buffer.from(match[2], 'hex');\n\t\tvar cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n\t\tvar cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n\t\tvar out = [];\n\t\tvar cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n\t\tout.push(cipher.update(cipherText));\n\t\tout.push(cipher['final']());\n\t\tdecrypted = Buffer.concat(out);\n\t}\n\tvar tag = key.match(startRegex)[1];\n\treturn {\n\t\ttag: tag,\n\t\tdata: decrypted\n\t};\n};\n","'use strict';\n\nvar asn1 = require('./asn1');\nvar aesid = require('./aesid.json');\nvar fixProc = require('./fixProc');\nvar ciphers = require('browserify-aes');\nvar compat = require('pbkdf2');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction decrypt(data, password) {\n\tvar salt = data.algorithm.decrypt.kde.kdeparams.salt;\n\tvar iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n\tvar algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n\tvar iv = data.algorithm.decrypt.cipher.iv;\n\tvar cipherText = data.subjectPrivateKey;\n\tvar keylen = parseInt(algo.split('-')[1], 10) / 8;\n\tvar key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n\tvar cipher = ciphers.createDecipheriv(algo, key, iv);\n\tvar out = [];\n\tout.push(cipher.update(cipherText));\n\tout.push(cipher['final']());\n\treturn Buffer.concat(out);\n}\n\nfunction parseKeys(buffer) {\n\tvar password;\n\tif (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n\t\tpassword = buffer.passphrase;\n\t\tbuffer = buffer.key;\n\t}\n\tif (typeof buffer === 'string') {\n\t\tbuffer = Buffer.from(buffer);\n\t}\n\n\tvar stripped = fixProc(buffer, password);\n\n\tvar type = stripped.tag;\n\tvar data = stripped.data;\n\tvar subtype, ndata;\n\tswitch (type) {\n\t\tcase 'CERTIFICATE':\n\t\t\tndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n\t\t\t// falls through\n\t\tcase 'PUBLIC KEY':\n\t\t\tif (!ndata) {\n\t\t\t\tndata = asn1.PublicKey.decode(data, 'der');\n\t\t\t}\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\tndata.subjectPrivateKey = ndata.subjectPublicKey;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'ec',\n\t\t\t\t\t\tdata: ndata\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tdata: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'ENCRYPTED PRIVATE KEY':\n\t\t\tdata = asn1.EncryptedPrivateKey.decode(data, 'der');\n\t\t\tdata = decrypt(data, password);\n\t\t\t// falls through\n\t\tcase 'PRIVATE KEY':\n\t\t\tndata = asn1.PrivateKey.decode(data, 'der');\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcurve: ndata.algorithm.curve,\n\t\t\t\t\t\tprivateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tparams: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'RSA PUBLIC KEY':\n\t\t\treturn asn1.RSAPublicKey.decode(data, 'der');\n\t\tcase 'RSA PRIVATE KEY':\n\t\t\treturn asn1.RSAPrivateKey.decode(data, 'der');\n\t\tcase 'DSA PRIVATE KEY':\n\t\t\treturn {\n\t\t\t\ttype: 'dsa',\n\t\t\t\tparams: asn1.DSAPrivateKey.decode(data, 'der')\n\t\t\t};\n\t\tcase 'EC PRIVATE KEY':\n\t\t\tdata = asn1.ECPrivateKey.decode(data, 'der');\n\t\t\treturn {\n\t\t\t\tcurve: data.parameters.value,\n\t\t\t\tprivateKey: data.privateKey\n\t\t\t};\n\t\tdefault: throw new Error('unknown key type ' + type);\n\t}\n}\nparseKeys.signature = asn1.signature;\n\nmodule.exports = parseKeys;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n var priv = parseKeys(key);\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n return ecSign(hash, priv);\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n return dsaSign(hash, priv, hashType);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = priv.modulus.byteLength();\n var pad = [0, 1];\n while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) { pad.push(hash[i]); }\n\n var out = crt(pad, priv);\n return out;\n}\n\nfunction ecSign(hash, priv) {\n var curveId = curves[priv.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n var curve = new EC(curveId);\n var key = curve.keyFromPrivate(priv.privateKey);\n var out = key.sign(hash);\n\n return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n var x = priv.params.priv_key;\n var p = priv.params.p;\n var q = priv.params.q;\n var g = priv.params.g;\n var r = new BN(0);\n var k;\n var H = bits2int(hash, q).mod(q);\n var s = false;\n var kv = getKey(x, q, hash, algo);\n while (s === false) {\n k = makeKey(q, kv, algo);\n r = makeR(g, k, p, q);\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n if (s.cmpn(0) === 0) {\n s = false;\n r = new BN(0);\n }\n }\n return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n r = r.toArray();\n s = s.toArray();\n\n // Pad values\n if (r[0] & 0x80) { r = [0].concat(r); }\n if (s[0] & 0x80) { s = [0].concat(s); }\n\n var total = r.length + s.length + 4;\n var res = [\n 0x30, total, 0x02, r.length\n ];\n res = res.concat(r, [0x02, s.length], s);\n return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n x = Buffer.from(x.toArray());\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length);\n x = Buffer.concat([zeros, x]);\n }\n var hlen = hash.length;\n var hbits = bits2octets(hash, q);\n var v = Buffer.alloc(hlen);\n v.fill(1);\n var k = Buffer.alloc(hlen);\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n var bits = new BN(obits);\n var shift = (obits.length << 3) - q.bitLength();\n if (shift > 0) { bits.ishrn(shift); }\n return bits;\n}\n\nfunction bits2octets(bits, q) {\n bits = bits2int(bits, q);\n bits = bits.mod(q);\n var out = Buffer.from(bits.toArray());\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length);\n out = Buffer.concat([zeros, out]);\n }\n return out;\n}\n\nfunction makeKey(q, kv, algo) {\n var t;\n var k;\n\n do {\n t = Buffer.alloc(0);\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n t = Buffer.concat([t, kv.v]);\n }\n\n k = bits2int(t, q);\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n } while (k.cmp(q) !== -1);\n\n return k;\n}\n\nfunction makeR(g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n var pub = parseKeys(key);\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n return ecVerify(sig, hash, pub);\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n return dsaVerify(sig, hash, pub);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = pub.modulus.byteLength();\n var pad = [1];\n var padNum = 0;\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff);\n padNum += 1;\n }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) {\n pad.push(hash[i]);\n }\n pad = Buffer.from(pad);\n var red = BN.mont(pub.modulus);\n sig = new BN(sig).toRed(red);\n\n sig = sig.redPow(new BN(pub.publicExponent));\n sig = Buffer.from(sig.fromRed().toArray());\n var out = padNum < 8 ? 1 : 0;\n len = Math.min(sig.length, pad.length);\n if (sig.length !== pad.length) { out = 1; }\n\n i = -1;\n while (++i < len) { out |= sig[i] ^ pad[i]; }\n return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n var curve = new EC(curveId);\n var pubkey = pub.data.subjectPrivateKey.data;\n\n return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n var p = pub.data.p;\n var q = pub.data.q;\n var g = pub.data.g;\n var y = pub.data.pub_key;\n var unpacked = parseKeys.signature.decode(sig, 'der');\n var s = unpacked.s;\n var r = unpacked.r;\n checkValue(s, q);\n checkValue(r, q);\n var montp = BN.mont(p);\n var w = s.invm(q);\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q);\n return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hashType = data.hash;\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nSign.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n this.end();\n var hash = this._hash.digest();\n var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n this.end();\n var hash = this._hash.digest();\n return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n return new Verify(algorithm);\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n};\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 // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\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 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 r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\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 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 BN.prototype.inspect = 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.modn(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);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\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 this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\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] & (1 << wbit)) >>> wbit;\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 var fftm = new FFTM();\n return fftm.mulp(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 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 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.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(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.modn = function modn (num) {\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 acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\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 return this.strip();\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 BN v4 instance\n r.strip();\n } else {\n // r is 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 return a.umod(this.m)._forceRed(this);\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 elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\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 // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\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 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 r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\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 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 BN.prototype.inspect = 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.modn(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);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\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 this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\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] & (1 << wbit)) >>> wbit;\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 var fftm = new FFTM();\n return fftm.mulp(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 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 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.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(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.modn = function modn (num) {\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 acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\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 return this.strip();\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 BN v4 instance\n r.strip();\n } else {\n // r is 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 return a.umod(this.m)._forceRed(this);\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 Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nfunction getParamSize(keySize) {\n\tvar result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1);\n\treturn result;\n}\n\nvar paramBytesForAlg = {\n\tES256: getParamSize(256),\n\tES384: getParamSize(384),\n\tES512: getParamSize(521)\n};\n\nfunction getParamBytesForAlg(alg) {\n\tvar paramBytes = paramBytesForAlg[alg];\n\tif (paramBytes) {\n\t\treturn paramBytes;\n\t}\n\n\tthrow new Error('Unknown algorithm \"' + alg + '\"');\n}\n\nmodule.exports = getParamBytesForAlg;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar getParamBytesForAlg = require('./param-bytes-for-alg');\n\nvar MAX_OCTET = 0x80,\n\tCLASS_UNIVERSAL = 0,\n\tPRIMITIVE_BIT = 0x20,\n\tTAG_SEQ = 0x10,\n\tTAG_INT = 0x02,\n\tENCODED_TAG_SEQ = (TAG_SEQ | PRIMITIVE_BIT) | (CLASS_UNIVERSAL << 6),\n\tENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6);\n\nfunction base64Url(base64) {\n\treturn base64\n\t\t.replace(/=/g, '')\n\t\t.replace(/\\+/g, '-')\n\t\t.replace(/\\//g, '_');\n}\n\nfunction signatureAsBuffer(signature) {\n\tif (Buffer.isBuffer(signature)) {\n\t\treturn signature;\n\t} else if ('string' === typeof signature) {\n\t\treturn Buffer.from(signature, 'base64');\n\t}\n\n\tthrow new TypeError('ECDSA signature must be a Base64 string or a Buffer');\n}\n\nfunction derToJose(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\t// the DER encoded param should at most be the param size, plus a padding\n\t// zero, since due to being a signed integer\n\tvar maxEncodedParamLength = paramBytes + 1;\n\n\tvar inputLength = signature.length;\n\n\tvar offset = 0;\n\tif (signature[offset++] !== ENCODED_TAG_SEQ) {\n\t\tthrow new Error('Could not find expected \"seq\"');\n\t}\n\n\tvar seqLength = signature[offset++];\n\tif (seqLength === (MAX_OCTET | 1)) {\n\t\tseqLength = signature[offset++];\n\t}\n\n\tif (inputLength - offset < seqLength) {\n\t\tthrow new Error('\"seq\" specified length of \"' + seqLength + '\", only \"' + (inputLength - offset) + '\" remaining');\n\t}\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"r\"');\n\t}\n\n\tvar rLength = signature[offset++];\n\n\tif (inputLength - offset - 2 < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", only \"' + (inputLength - offset - 2) + '\" available');\n\t}\n\n\tif (maxEncodedParamLength < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar rOffset = offset;\n\toffset += rLength;\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"s\"');\n\t}\n\n\tvar sLength = signature[offset++];\n\n\tif (inputLength - offset !== sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", expected \"' + (inputLength - offset) + '\"');\n\t}\n\n\tif (maxEncodedParamLength < sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar sOffset = offset;\n\toffset += sLength;\n\n\tif (offset !== inputLength) {\n\t\tthrow new Error('Expected to consume entire buffer, but \"' + (inputLength - offset) + '\" bytes remain');\n\t}\n\n\tvar rPadding = paramBytes - rLength,\n\t\tsPadding = paramBytes - sLength;\n\n\tvar dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength);\n\n\tfor (offset = 0; offset < rPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength);\n\n\toffset = paramBytes;\n\n\tfor (var o = offset; offset < o + sPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength);\n\n\tdst = dst.toString('base64');\n\tdst = base64Url(dst);\n\n\treturn dst;\n}\n\nfunction countPadding(buf, start, stop) {\n\tvar padding = 0;\n\twhile (start + padding < stop && buf[start + padding] === 0) {\n\t\t++padding;\n\t}\n\n\tvar needsSign = buf[start + padding] >= MAX_OCTET;\n\tif (needsSign) {\n\t\t--padding;\n\t}\n\n\treturn padding;\n}\n\nfunction joseToDer(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\tvar signatureBytes = signature.length;\n\tif (signatureBytes !== paramBytes * 2) {\n\t\tthrow new TypeError('\"' + alg + '\" signatures must be \"' + paramBytes * 2 + '\" bytes, saw \"' + signatureBytes + '\"');\n\t}\n\n\tvar rPadding = countPadding(signature, 0, paramBytes);\n\tvar sPadding = countPadding(signature, paramBytes, signature.length);\n\tvar rLength = paramBytes - rPadding;\n\tvar sLength = paramBytes - sPadding;\n\n\tvar rsBytes = 1 + 1 + rLength + 1 + 1 + sLength;\n\n\tvar shortLength = rsBytes < MAX_OCTET;\n\n\tvar dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes);\n\n\tvar offset = 0;\n\tdst[offset++] = ENCODED_TAG_SEQ;\n\tif (shortLength) {\n\t\t// Bit 8 has value \"0\"\n\t\t// bits 7-1 give the length.\n\t\tdst[offset++] = rsBytes;\n\t} else {\n\t\t// Bit 8 of first octet has value \"1\"\n\t\t// bits 7-1 give the number of additional length octets.\n\t\tdst[offset++] = MAX_OCTET\t| 1;\n\t\t// length, base 256\n\t\tdst[offset++] = rsBytes & 0xff;\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = rLength;\n\tif (rPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\toffset += signature.copy(dst, offset, 0, paramBytes);\n\t} else {\n\t\toffset += signature.copy(dst, offset, rPadding, paramBytes);\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = sLength;\n\tif (sPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\tsignature.copy(dst, offset, paramBytes);\n\t} else {\n\t\tsignature.copy(dst, offset, paramBytes + sPadding);\n\t}\n\n\treturn dst;\n}\n\nmodule.exports = {\n\tderToJose: derToJose,\n\tjoseToDer: joseToDer\n};\n","var bufferEqual = require('buffer-equal-constant-time');\nvar Buffer = require('safe-buffer').Buffer;\nvar crypto = require('crypto');\nvar formatEcdsa = require('ecdsa-sig-formatter');\nvar util = require('util');\n\nvar MSG_INVALID_ALGORITHM = '\"%s\" is not a valid algorithm.\\n Supported algorithms are:\\n \"HS256\", \"HS384\", \"HS512\", \"RS256\", \"RS384\", \"RS512\", \"PS256\", \"PS384\", \"PS512\", \"ES256\", \"ES384\", \"ES512\" and \"none\".'\nvar MSG_INVALID_SECRET = 'secret must be a string or buffer';\nvar MSG_INVALID_VERIFIER_KEY = 'key must be a string or a buffer';\nvar MSG_INVALID_SIGNER_KEY = 'key must be a string, a buffer or an object';\n\nvar supportsKeyObjects = typeof crypto.createPublicKey === 'function';\nif (supportsKeyObjects) {\n MSG_INVALID_VERIFIER_KEY += ' or a KeyObject';\n MSG_INVALID_SECRET += 'or a KeyObject';\n}\n\nfunction checkIsPublicKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return;\n }\n\n if (!supportsKeyObjects) {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key !== 'object') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.type !== 'string') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.asymmetricKeyType !== 'string') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.export !== 'function') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n};\n\nfunction checkIsPrivateKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return;\n }\n\n if (typeof key === 'object') {\n return;\n }\n\n throw typeError(MSG_INVALID_SIGNER_KEY);\n};\n\nfunction checkIsSecretKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return key;\n }\n\n if (!supportsKeyObjects) {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (typeof key !== 'object') {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (key.type !== 'secret') {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (typeof key.export !== 'function') {\n throw typeError(MSG_INVALID_SECRET);\n }\n}\n\nfunction fromBase64(base64) {\n return base64\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\nfunction toBase64(base64url) {\n base64url = base64url.toString();\n\n var padding = 4 - base64url.length % 4;\n if (padding !== 4) {\n for (var i = 0; i < padding; ++i) {\n base64url += '=';\n }\n }\n\n return base64url\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n}\n\nfunction typeError(template) {\n var args = [].slice.call(arguments, 1);\n var errMsg = util.format.bind(util, template).apply(null, args);\n return new TypeError(errMsg);\n}\n\nfunction bufferOrString(obj) {\n return Buffer.isBuffer(obj) || typeof obj === 'string';\n}\n\nfunction normalizeInput(thing) {\n if (!bufferOrString(thing))\n thing = JSON.stringify(thing);\n return thing;\n}\n\nfunction createHmacSigner(bits) {\n return function sign(thing, secret) {\n checkIsSecretKey(secret);\n thing = normalizeInput(thing);\n var hmac = crypto.createHmac('sha' + bits, secret);\n var sig = (hmac.update(thing), hmac.digest('base64'))\n return fromBase64(sig);\n }\n}\n\nfunction createHmacVerifier(bits) {\n return function verify(thing, signature, secret) {\n var computedSig = createHmacSigner(bits)(thing, secret);\n return bufferEqual(Buffer.from(signature), Buffer.from(computedSig));\n }\n}\n\nfunction createKeySigner(bits) {\n return function sign(thing, privateKey) {\n checkIsPrivateKey(privateKey);\n thing = normalizeInput(thing);\n // Even though we are specifying \"RSA\" here, this works with ECDSA\n // keys as well.\n var signer = crypto.createSign('RSA-SHA' + bits);\n var sig = (signer.update(thing), signer.sign(privateKey, 'base64'));\n return fromBase64(sig);\n }\n}\n\nfunction createKeyVerifier(bits) {\n return function verify(thing, signature, publicKey) {\n checkIsPublicKey(publicKey);\n thing = normalizeInput(thing);\n signature = toBase64(signature);\n var verifier = crypto.createVerify('RSA-SHA' + bits);\n verifier.update(thing);\n return verifier.verify(publicKey, signature, 'base64');\n }\n}\n\nfunction createPSSKeySigner(bits) {\n return function sign(thing, privateKey) {\n checkIsPrivateKey(privateKey);\n thing = normalizeInput(thing);\n var signer = crypto.createSign('RSA-SHA' + bits);\n var sig = (signer.update(thing), signer.sign({\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, 'base64'));\n return fromBase64(sig);\n }\n}\n\nfunction createPSSKeyVerifier(bits) {\n return function verify(thing, signature, publicKey) {\n checkIsPublicKey(publicKey);\n thing = normalizeInput(thing);\n signature = toBase64(signature);\n var verifier = crypto.createVerify('RSA-SHA' + bits);\n verifier.update(thing);\n return verifier.verify({\n key: publicKey,\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, signature, 'base64');\n }\n}\n\nfunction createECDSASigner(bits) {\n var inner = createKeySigner(bits);\n return function sign() {\n var signature = inner.apply(null, arguments);\n signature = formatEcdsa.derToJose(signature, 'ES' + bits);\n return signature;\n };\n}\n\nfunction createECDSAVerifer(bits) {\n var inner = createKeyVerifier(bits);\n return function verify(thing, signature, publicKey) {\n signature = formatEcdsa.joseToDer(signature, 'ES' + bits).toString('base64');\n var result = inner(thing, signature, publicKey);\n return result;\n };\n}\n\nfunction createNoneSigner() {\n return function sign() {\n return '';\n }\n}\n\nfunction createNoneVerifier() {\n return function verify(thing, signature) {\n return signature === '';\n }\n}\n\nmodule.exports = function jwa(algorithm) {\n var signerFactories = {\n hs: createHmacSigner,\n rs: createKeySigner,\n ps: createPSSKeySigner,\n es: createECDSASigner,\n none: createNoneSigner,\n }\n var verifierFactories = {\n hs: createHmacVerifier,\n rs: createKeyVerifier,\n ps: createPSSKeyVerifier,\n es: createECDSAVerifer,\n none: createNoneVerifier,\n }\n var match = algorithm.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/i);\n if (!match)\n throw typeError(MSG_INVALID_ALGORITHM, algorithm);\n var algo = (match[1] || match[3]).toLowerCase();\n var bits = match[2];\n\n return {\n sign: signerFactories[algo](bits),\n verify: verifierFactories[algo](bits),\n }\n};\n","/*global module*/\nvar Buffer = require('buffer').Buffer;\n\nmodule.exports = function toString(obj) {\n if (typeof obj === 'string')\n return obj;\n if (typeof obj === 'number' || Buffer.isBuffer(obj))\n return obj.toString();\n return JSON.stringify(obj);\n};\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\n\nfunction base64url(string, encoding) {\n return Buffer\n .from(string, encoding)\n .toString('base64')\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\nfunction jwsSecuredInput(header, payload, encoding) {\n encoding = encoding || 'utf8';\n var encodedHeader = base64url(toString(header), 'binary');\n var encodedPayload = base64url(toString(payload), encoding);\n return util.format('%s.%s', encodedHeader, encodedPayload);\n}\n\nfunction jwsSign(opts) {\n var header = opts.header;\n var payload = opts.payload;\n var secretOrKey = opts.secret || opts.privateKey;\n var encoding = opts.encoding;\n var algo = jwa(header.alg);\n var securedInput = jwsSecuredInput(header, payload, encoding);\n var signature = algo.sign(securedInput, secretOrKey);\n return util.format('%s.%s', securedInput, signature);\n}\n\nfunction SignStream(opts) {\n var secret = opts.secret||opts.privateKey||opts.key;\n var secretStream = new DataStream(secret);\n this.readable = true;\n this.header = opts.header;\n this.encoding = opts.encoding;\n this.secret = this.privateKey = this.key = secretStream;\n this.payload = new DataStream(opts.payload);\n this.secret.once('close', function () {\n if (!this.payload.writable && this.readable)\n this.sign();\n }.bind(this));\n\n this.payload.once('close', function () {\n if (!this.secret.writable && this.readable)\n this.sign();\n }.bind(this));\n}\nutil.inherits(SignStream, Stream);\n\nSignStream.prototype.sign = function sign() {\n try {\n var signature = jwsSign({\n header: this.header,\n payload: this.payload.buffer,\n secret: this.secret.buffer,\n encoding: this.encoding\n });\n this.emit('done', signature);\n this.emit('data', signature);\n this.emit('end');\n this.readable = false;\n return signature;\n } catch (e) {\n this.readable = false;\n this.emit('error', e);\n this.emit('close');\n }\n};\n\nSignStream.sign = jwsSign;\n\nmodule.exports = SignStream;\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\nvar JWS_REGEX = /^[a-zA-Z0-9\\-_]+?\\.[a-zA-Z0-9\\-_]+?\\.([a-zA-Z0-9\\-_]+)?$/;\n\nfunction isObject(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction safeJsonParse(thing) {\n if (isObject(thing))\n return thing;\n try { return JSON.parse(thing); }\n catch (e) { return undefined; }\n}\n\nfunction headerFromJWS(jwsSig) {\n var encodedHeader = jwsSig.split('.', 1)[0];\n return safeJsonParse(Buffer.from(encodedHeader, 'base64').toString('binary'));\n}\n\nfunction securedInputFromJWS(jwsSig) {\n return jwsSig.split('.', 2).join('.');\n}\n\nfunction signatureFromJWS(jwsSig) {\n return jwsSig.split('.')[2];\n}\n\nfunction payloadFromJWS(jwsSig, encoding) {\n encoding = encoding || 'utf8';\n var payload = jwsSig.split('.')[1];\n return Buffer.from(payload, 'base64').toString(encoding);\n}\n\nfunction isValidJws(string) {\n return JWS_REGEX.test(string) && !!headerFromJWS(string);\n}\n\nfunction jwsVerify(jwsSig, algorithm, secretOrKey) {\n if (!algorithm) {\n var err = new Error(\"Missing algorithm parameter for jws.verify\");\n err.code = \"MISSING_ALGORITHM\";\n throw err;\n }\n jwsSig = toString(jwsSig);\n var signature = signatureFromJWS(jwsSig);\n var securedInput = securedInputFromJWS(jwsSig);\n var algo = jwa(algorithm);\n return algo.verify(securedInput, signature, secretOrKey);\n}\n\nfunction jwsDecode(jwsSig, opts) {\n opts = opts || {};\n jwsSig = toString(jwsSig);\n\n if (!isValidJws(jwsSig))\n return null;\n\n var header = headerFromJWS(jwsSig);\n\n if (!header)\n return null;\n\n var payload = payloadFromJWS(jwsSig);\n if (header.typ === 'JWT' || opts.json)\n payload = JSON.parse(payload, opts.encoding);\n\n return {\n header: header,\n payload: payload,\n signature: signatureFromJWS(jwsSig)\n };\n}\n\nfunction VerifyStream(opts) {\n opts = opts || {};\n var secretOrKey = opts.secret||opts.publicKey||opts.key;\n var secretStream = new DataStream(secretOrKey);\n this.readable = true;\n this.algorithm = opts.algorithm;\n this.encoding = opts.encoding;\n this.secret = this.publicKey = this.key = secretStream;\n this.signature = new DataStream(opts.signature);\n this.secret.once('close', function () {\n if (!this.signature.writable && this.readable)\n this.verify();\n }.bind(this));\n\n this.signature.once('close', function () {\n if (!this.secret.writable && this.readable)\n this.verify();\n }.bind(this));\n}\nutil.inherits(VerifyStream, Stream);\nVerifyStream.prototype.verify = function verify() {\n try {\n var valid = jwsVerify(this.signature.buffer, this.algorithm, this.key.buffer);\n var obj = jwsDecode(this.signature.buffer, this.encoding);\n this.emit('done', valid, obj);\n this.emit('data', valid);\n this.emit('end');\n this.readable = false;\n return valid;\n } catch (e) {\n this.readable = false;\n this.emit('error', e);\n this.emit('close');\n }\n};\n\nVerifyStream.decode = jwsDecode;\nVerifyStream.isValid = isValidJws;\nVerifyStream.verify = jwsVerify;\n\nmodule.exports = VerifyStream;\n","/*global exports*/\nvar SignStream = require('./lib/sign-stream');\nvar VerifyStream = require('./lib/verify-stream');\n\nvar ALGORITHMS = [\n 'HS256', 'HS384', 'HS512',\n 'RS256', 'RS384', 'RS512',\n 'PS256', 'PS384', 'PS512',\n 'ES256', 'ES384', 'ES512'\n];\n\nexports.ALGORITHMS = ALGORITHMS;\nexports.sign = SignStream.sign;\nexports.verify = VerifyStream.verify;\nexports.decode = VerifyStream.decode;\nexports.isValid = VerifyStream.isValid;\nexports.createSign = function createSign(opts) {\n return new SignStream(opts);\n};\nexports.createVerify = function createVerify(opts) {\n return new VerifyStream(opts);\n};\n","var jws = require('jws');\n\nmodule.exports = function (jwt, options) {\n options = options || {};\n var decoded = jws.decode(jwt, options);\n if (!decoded) { return null; }\n var payload = decoded.payload;\n\n //try parse the payload\n if(typeof payload === 'string') {\n try {\n var obj = JSON.parse(payload);\n if(obj !== null && typeof obj === 'object') {\n payload = obj;\n }\n } catch (e) { }\n }\n\n //return header if `complete` option is enabled. header includes claims\n //such as `kid` and `alg` used to select the key within a JWKS needed to\n //verify the signature\n if (options.complete === true) {\n return {\n header: decoded.header,\n payload: payload,\n signature: decoded.signature\n };\n }\n return payload;\n};\n","var JsonWebTokenError = function (message, error) {\n Error.call(this, message);\n if(Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = 'JsonWebTokenError';\n this.message = message;\n if (error) this.inner = error;\n};\n\nJsonWebTokenError.prototype = Object.create(Error.prototype);\nJsonWebTokenError.prototype.constructor = JsonWebTokenError;\n\nmodule.exports = JsonWebTokenError;\n","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar NotBeforeError = function (message, date) {\n JsonWebTokenError.call(this, message);\n this.name = 'NotBeforeError';\n this.date = date;\n};\n\nNotBeforeError.prototype = Object.create(JsonWebTokenError.prototype);\n\nNotBeforeError.prototype.constructor = NotBeforeError;\n\nmodule.exports = NotBeforeError;","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar TokenExpiredError = function (message, expiredAt) {\n JsonWebTokenError.call(this, message);\n this.name = 'TokenExpiredError';\n this.expiredAt = expiredAt;\n};\n\nTokenExpiredError.prototype = Object.create(JsonWebTokenError.prototype);\n\nTokenExpiredError.prototype.constructor = TokenExpiredError;\n\nmodule.exports = TokenExpiredError;","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","var ms = require('ms');\n\nmodule.exports = function (time, iat) {\n var timestamp = iat || Math.floor(Date.now() / 1000);\n\n if (typeof time === 'string') {\n var milliseconds = ms(time);\n if (typeof milliseconds === 'undefined') {\n return;\n }\n return Math.floor(timestamp + milliseconds / 1000);\n } else if (typeof time === 'number') {\n return timestamp + time;\n } else {\n return;\n }\n\n};","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // Otherwise it can be determined by checking the high version\n\n if (highVersion.patch) {\n // anything higher than a patch bump would result in the wrong version\n return 'patch'\n }\n\n if (highVersion.minor) {\n // anything higher than a minor bump would result in the wrong version\n return 'minor'\n }\n\n // bumping major/minor/patch all have same result\n return 'major'\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","class LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.format()\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range\n .trim()\n .split(/\\s+/)\n .join(' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.format()\n }\n\n format () {\n this.range = this.set\n .map((comps) => comps.join(' ').trim())\n .join('||')\n .trim()\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","const semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '>=15.7.0');\n","const semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '>=16.9.0');\n","const ASYMMETRIC_KEY_DETAILS_SUPPORTED = require('./asymmetricKeyDetailsSupported');\nconst RSA_PSS_KEY_DETAILS_SUPPORTED = require('./rsaPssKeyDetailsSupported');\n\nconst allowedAlgorithmsForKeys = {\n 'ec': ['ES256', 'ES384', 'ES512'],\n 'rsa': ['RS256', 'PS256', 'RS384', 'PS384', 'RS512', 'PS512'],\n 'rsa-pss': ['PS256', 'PS384', 'PS512']\n};\n\nconst allowedCurves = {\n ES256: 'prime256v1',\n ES384: 'secp384r1',\n ES512: 'secp521r1',\n};\n\nmodule.exports = function(algorithm, key) {\n if (!algorithm || !key) return;\n\n const keyType = key.asymmetricKeyType;\n if (!keyType) return;\n\n const allowedAlgorithms = allowedAlgorithmsForKeys[keyType];\n\n if (!allowedAlgorithms) {\n throw new Error(`Unknown key type \"${keyType}\".`);\n }\n\n if (!allowedAlgorithms.includes(algorithm)) {\n throw new Error(`\"alg\" parameter for \"${keyType}\" key type must be one of: ${allowedAlgorithms.join(', ')}.`)\n }\n\n /*\n * Ignore the next block from test coverage because it gets executed\n * conditionally depending on the Node version. Not ignoring it would\n * prevent us from reaching the target % of coverage for versions of\n * Node under 15.7.0.\n */\n /* istanbul ignore next */\n if (ASYMMETRIC_KEY_DETAILS_SUPPORTED) {\n switch (keyType) {\n case 'ec':\n const keyCurve = key.asymmetricKeyDetails.namedCurve;\n const allowedCurve = allowedCurves[algorithm];\n\n if (keyCurve !== allowedCurve) {\n throw new Error(`\"alg\" parameter \"${algorithm}\" requires curve \"${allowedCurve}\".`);\n }\n break;\n\n case 'rsa-pss':\n if (RSA_PSS_KEY_DETAILS_SUPPORTED) {\n const length = parseInt(algorithm.slice(-3), 10);\n const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = key.asymmetricKeyDetails;\n\n if (hashAlgorithm !== `sha${length}` || mgf1HashAlgorithm !== hashAlgorithm) {\n throw new Error(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of \"alg\" ${algorithm}.`);\n }\n\n if (saltLength !== undefined && saltLength > length >> 3) {\n throw new Error(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of \"alg\" ${algorithm}.`)\n }\n }\n break;\n }\n }\n}\n","var semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '^6.12.0 || >=8.0.0');\n","const JsonWebTokenError = require('./lib/JsonWebTokenError');\nconst NotBeforeError = require('./lib/NotBeforeError');\nconst TokenExpiredError = require('./lib/TokenExpiredError');\nconst decode = require('./decode');\nconst timespan = require('./lib/timespan');\nconst validateAsymmetricKey = require('./lib/validateAsymmetricKey');\nconst PS_SUPPORTED = require('./lib/psSupported');\nconst jws = require('jws');\nconst {KeyObject, createSecretKey, createPublicKey} = require(\"crypto\");\n\nconst PUB_KEY_ALGS = ['RS256', 'RS384', 'RS512'];\nconst EC_KEY_ALGS = ['ES256', 'ES384', 'ES512'];\nconst RSA_KEY_ALGS = ['RS256', 'RS384', 'RS512'];\nconst HS_ALGS = ['HS256', 'HS384', 'HS512'];\n\nif (PS_SUPPORTED) {\n PUB_KEY_ALGS.splice(PUB_KEY_ALGS.length, 0, 'PS256', 'PS384', 'PS512');\n RSA_KEY_ALGS.splice(RSA_KEY_ALGS.length, 0, 'PS256', 'PS384', 'PS512');\n}\n\nmodule.exports = function (jwtString, secretOrPublicKey, options, callback) {\n if ((typeof options === 'function') && !callback) {\n callback = options;\n options = {};\n }\n\n if (!options) {\n options = {};\n }\n\n //clone this object since we are going to mutate it.\n options = Object.assign({}, options);\n\n let done;\n\n if (callback) {\n done = callback;\n } else {\n done = function(err, data) {\n if (err) throw err;\n return data;\n };\n }\n\n if (options.clockTimestamp && typeof options.clockTimestamp !== 'number') {\n return done(new JsonWebTokenError('clockTimestamp must be a number'));\n }\n\n if (options.nonce !== undefined && (typeof options.nonce !== 'string' || options.nonce.trim() === '')) {\n return done(new JsonWebTokenError('nonce must be a non-empty string'));\n }\n\n if (options.allowInvalidAsymmetricKeyTypes !== undefined && typeof options.allowInvalidAsymmetricKeyTypes !== 'boolean') {\n return done(new JsonWebTokenError('allowInvalidAsymmetricKeyTypes must be a boolean'));\n }\n\n const clockTimestamp = options.clockTimestamp || Math.floor(Date.now() / 1000);\n\n if (!jwtString){\n return done(new JsonWebTokenError('jwt must be provided'));\n }\n\n if (typeof jwtString !== 'string') {\n return done(new JsonWebTokenError('jwt must be a string'));\n }\n\n const parts = jwtString.split('.');\n\n if (parts.length !== 3){\n return done(new JsonWebTokenError('jwt malformed'));\n }\n\n let decodedToken;\n\n try {\n decodedToken = decode(jwtString, { complete: true });\n } catch(err) {\n return done(err);\n }\n\n if (!decodedToken) {\n return done(new JsonWebTokenError('invalid token'));\n }\n\n const header = decodedToken.header;\n let getSecret;\n\n if(typeof secretOrPublicKey === 'function') {\n if(!callback) {\n return done(new JsonWebTokenError('verify must be called asynchronous if secret or public key is provided as a callback'));\n }\n\n getSecret = secretOrPublicKey;\n }\n else {\n getSecret = function(header, secretCallback) {\n return secretCallback(null, secretOrPublicKey);\n };\n }\n\n return getSecret(header, function(err, secretOrPublicKey) {\n if(err) {\n return done(new JsonWebTokenError('error in secret or public key callback: ' + err.message));\n }\n\n const hasSignature = parts[2].trim() !== '';\n\n if (!hasSignature && secretOrPublicKey){\n return done(new JsonWebTokenError('jwt signature is required'));\n }\n\n if (hasSignature && !secretOrPublicKey) {\n return done(new JsonWebTokenError('secret or public key must be provided'));\n }\n\n if (!hasSignature && !options.algorithms) {\n return done(new JsonWebTokenError('please specify \"none\" in \"algorithms\" to verify unsigned tokens'));\n }\n\n if (secretOrPublicKey != null && !(secretOrPublicKey instanceof KeyObject)) {\n try {\n secretOrPublicKey = createPublicKey(secretOrPublicKey);\n } catch (_) {\n try {\n secretOrPublicKey = createSecretKey(typeof secretOrPublicKey === 'string' ? Buffer.from(secretOrPublicKey) : secretOrPublicKey);\n } catch (_) {\n return done(new JsonWebTokenError('secretOrPublicKey is not valid key material'))\n }\n }\n }\n\n if (!options.algorithms) {\n if (secretOrPublicKey.type === 'secret') {\n options.algorithms = HS_ALGS;\n } else if (['rsa', 'rsa-pss'].includes(secretOrPublicKey.asymmetricKeyType)) {\n options.algorithms = RSA_KEY_ALGS\n } else if (secretOrPublicKey.asymmetricKeyType === 'ec') {\n options.algorithms = EC_KEY_ALGS\n } else {\n options.algorithms = PUB_KEY_ALGS\n }\n }\n\n if (options.algorithms.indexOf(decodedToken.header.alg) === -1) {\n return done(new JsonWebTokenError('invalid algorithm'));\n }\n\n if (header.alg.startsWith('HS') && secretOrPublicKey.type !== 'secret') {\n return done(new JsonWebTokenError((`secretOrPublicKey must be a symmetric key when using ${header.alg}`)))\n } else if (/^(?:RS|PS|ES)/.test(header.alg) && secretOrPublicKey.type !== 'public') {\n return done(new JsonWebTokenError((`secretOrPublicKey must be an asymmetric key when using ${header.alg}`)))\n }\n\n if (!options.allowInvalidAsymmetricKeyTypes) {\n try {\n validateAsymmetricKey(header.alg, secretOrPublicKey);\n } catch (e) {\n return done(e);\n }\n }\n\n let valid;\n\n try {\n valid = jws.verify(jwtString, decodedToken.header.alg, secretOrPublicKey);\n } catch (e) {\n return done(e);\n }\n\n if (!valid) {\n return done(new JsonWebTokenError('invalid signature'));\n }\n\n const payload = decodedToken.payload;\n\n if (typeof payload.nbf !== 'undefined' && !options.ignoreNotBefore) {\n if (typeof payload.nbf !== 'number') {\n return done(new JsonWebTokenError('invalid nbf value'));\n }\n if (payload.nbf > clockTimestamp + (options.clockTolerance || 0)) {\n return done(new NotBeforeError('jwt not active', new Date(payload.nbf * 1000)));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && !options.ignoreExpiration) {\n if (typeof payload.exp !== 'number') {\n return done(new JsonWebTokenError('invalid exp value'));\n }\n if (clockTimestamp >= payload.exp + (options.clockTolerance || 0)) {\n return done(new TokenExpiredError('jwt expired', new Date(payload.exp * 1000)));\n }\n }\n\n if (options.audience) {\n const audiences = Array.isArray(options.audience) ? options.audience : [options.audience];\n const target = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n const match = target.some(function (targetAudience) {\n return audiences.some(function (audience) {\n return audience instanceof RegExp ? audience.test(targetAudience) : audience === targetAudience;\n });\n });\n\n if (!match) {\n return done(new JsonWebTokenError('jwt audience invalid. expected: ' + audiences.join(' or ')));\n }\n }\n\n if (options.issuer) {\n const invalid_issuer =\n (typeof options.issuer === 'string' && payload.iss !== options.issuer) ||\n (Array.isArray(options.issuer) && options.issuer.indexOf(payload.iss) === -1);\n\n if (invalid_issuer) {\n return done(new JsonWebTokenError('jwt issuer invalid. expected: ' + options.issuer));\n }\n }\n\n if (options.subject) {\n if (payload.sub !== options.subject) {\n return done(new JsonWebTokenError('jwt subject invalid. expected: ' + options.subject));\n }\n }\n\n if (options.jwtid) {\n if (payload.jti !== options.jwtid) {\n return done(new JsonWebTokenError('jwt jwtid invalid. expected: ' + options.jwtid));\n }\n }\n\n if (options.nonce) {\n if (payload.nonce !== options.nonce) {\n return done(new JsonWebTokenError('jwt nonce invalid. expected: ' + options.nonce));\n }\n }\n\n if (options.maxAge) {\n if (typeof payload.iat !== 'number') {\n return done(new JsonWebTokenError('iat required when maxAge is specified'));\n }\n\n const maxAgeTimestamp = timespan(options.maxAge, payload.iat);\n if (typeof maxAgeTimestamp === 'undefined') {\n return done(new JsonWebTokenError('\"maxAge\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n if (clockTimestamp >= maxAgeTimestamp + (options.clockTolerance || 0)) {\n return done(new TokenExpiredError('maxAge exceeded', new Date(maxAgeTimestamp * 1000)));\n }\n }\n\n if (options.complete === true) {\n const signature = decodedToken.signature;\n\n return done(null, {\n header: header,\n payload: payload,\n signature: signature\n });\n }\n\n return done(null, payload);\n });\n};\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object ? baseValues(object, keys(object)) : [];\n}\n\nmodule.exports = includes;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && objectToString.call(value) == boolTag);\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isBoolean;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\nfunction isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = isInteger;\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n * as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && objectToString.call(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) ||\n objectToString.call(value) != objectTag || isHostObject(value)) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nmodule.exports = isPlainObject;\n","/**\n * lodash 4.0.1 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n}\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n return before(2, func);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = once;\n","const timespan = require('./lib/timespan');\nconst PS_SUPPORTED = require('./lib/psSupported');\nconst validateAsymmetricKey = require('./lib/validateAsymmetricKey');\nconst jws = require('jws');\nconst includes = require('lodash.includes');\nconst isBoolean = require('lodash.isboolean');\nconst isInteger = require('lodash.isinteger');\nconst isNumber = require('lodash.isnumber');\nconst isPlainObject = require('lodash.isplainobject');\nconst isString = require('lodash.isstring');\nconst once = require('lodash.once');\nconst { KeyObject, createSecretKey, createPrivateKey } = require('crypto')\n\nconst SUPPORTED_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'none'];\nif (PS_SUPPORTED) {\n SUPPORTED_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nconst sign_options_schema = {\n expiresIn: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"expiresIn\" should be a number of seconds or string representing a timespan' },\n notBefore: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"notBefore\" should be a number of seconds or string representing a timespan' },\n audience: { isValid: function(value) { return isString(value) || Array.isArray(value); }, message: '\"audience\" must be a string or array' },\n algorithm: { isValid: includes.bind(null, SUPPORTED_ALGS), message: '\"algorithm\" must be a valid string enum value' },\n header: { isValid: isPlainObject, message: '\"header\" must be an object' },\n encoding: { isValid: isString, message: '\"encoding\" must be a string' },\n issuer: { isValid: isString, message: '\"issuer\" must be a string' },\n subject: { isValid: isString, message: '\"subject\" must be a string' },\n jwtid: { isValid: isString, message: '\"jwtid\" must be a string' },\n noTimestamp: { isValid: isBoolean, message: '\"noTimestamp\" must be a boolean' },\n keyid: { isValid: isString, message: '\"keyid\" must be a string' },\n mutatePayload: { isValid: isBoolean, message: '\"mutatePayload\" must be a boolean' },\n allowInsecureKeySizes: { isValid: isBoolean, message: '\"allowInsecureKeySizes\" must be a boolean'},\n allowInvalidAsymmetricKeyTypes: { isValid: isBoolean, message: '\"allowInvalidAsymmetricKeyTypes\" must be a boolean'}\n};\n\nconst registered_claims_schema = {\n iat: { isValid: isNumber, message: '\"iat\" should be a number of seconds' },\n exp: { isValid: isNumber, message: '\"exp\" should be a number of seconds' },\n nbf: { isValid: isNumber, message: '\"nbf\" should be a number of seconds' }\n};\n\nfunction validate(schema, allowUnknown, object, parameterName) {\n if (!isPlainObject(object)) {\n throw new Error('Expected \"' + parameterName + '\" to be a plain object.');\n }\n Object.keys(object)\n .forEach(function(key) {\n const validator = schema[key];\n if (!validator) {\n if (!allowUnknown) {\n throw new Error('\"' + key + '\" is not allowed in \"' + parameterName + '\"');\n }\n return;\n }\n if (!validator.isValid(object[key])) {\n throw new Error(validator.message);\n }\n });\n}\n\nfunction validateOptions(options) {\n return validate(sign_options_schema, false, options, 'options');\n}\n\nfunction validatePayload(payload) {\n return validate(registered_claims_schema, true, payload, 'payload');\n}\n\nconst options_to_payload = {\n 'audience': 'aud',\n 'issuer': 'iss',\n 'subject': 'sub',\n 'jwtid': 'jti'\n};\n\nconst options_for_objects = [\n 'expiresIn',\n 'notBefore',\n 'noTimestamp',\n 'audience',\n 'issuer',\n 'subject',\n 'jwtid',\n];\n\nmodule.exports = function (payload, secretOrPrivateKey, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n } else {\n options = options || {};\n }\n\n const isObjectPayload = typeof payload === 'object' &&\n !Buffer.isBuffer(payload);\n\n const header = Object.assign({\n alg: options.algorithm || 'HS256',\n typ: isObjectPayload ? 'JWT' : undefined,\n kid: options.keyid\n }, options.header);\n\n function failure(err) {\n if (callback) {\n return callback(err);\n }\n throw err;\n }\n\n if (!secretOrPrivateKey && options.algorithm !== 'none') {\n return failure(new Error('secretOrPrivateKey must have a value'));\n }\n\n if (secretOrPrivateKey != null && !(secretOrPrivateKey instanceof KeyObject)) {\n try {\n secretOrPrivateKey = createPrivateKey(secretOrPrivateKey)\n } catch (_) {\n try {\n secretOrPrivateKey = createSecretKey(typeof secretOrPrivateKey === 'string' ? Buffer.from(secretOrPrivateKey) : secretOrPrivateKey)\n } catch (_) {\n return failure(new Error('secretOrPrivateKey is not valid key material'));\n }\n }\n }\n\n if (header.alg.startsWith('HS') && secretOrPrivateKey.type !== 'secret') {\n return failure(new Error((`secretOrPrivateKey must be a symmetric key when using ${header.alg}`)))\n } else if (/^(?:RS|PS|ES)/.test(header.alg)) {\n if (secretOrPrivateKey.type !== 'private') {\n return failure(new Error((`secretOrPrivateKey must be an asymmetric key when using ${header.alg}`)))\n }\n if (!options.allowInsecureKeySizes &&\n !header.alg.startsWith('ES') &&\n secretOrPrivateKey.asymmetricKeyDetails !== undefined && //KeyObject.asymmetricKeyDetails is supported in Node 15+\n secretOrPrivateKey.asymmetricKeyDetails.modulusLength < 2048) {\n return failure(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`));\n }\n }\n\n if (typeof payload === 'undefined') {\n return failure(new Error('payload is required'));\n } else if (isObjectPayload) {\n try {\n validatePayload(payload);\n }\n catch (error) {\n return failure(error);\n }\n if (!options.mutatePayload) {\n payload = Object.assign({},payload);\n }\n } else {\n const invalid_options = options_for_objects.filter(function (opt) {\n return typeof options[opt] !== 'undefined';\n });\n\n if (invalid_options.length > 0) {\n return failure(new Error('invalid ' + invalid_options.join(',') + ' option for ' + (typeof payload ) + ' payload'));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && typeof options.expiresIn !== 'undefined') {\n return failure(new Error('Bad \"options.expiresIn\" option the payload already has an \"exp\" property.'));\n }\n\n if (typeof payload.nbf !== 'undefined' && typeof options.notBefore !== 'undefined') {\n return failure(new Error('Bad \"options.notBefore\" option the payload already has an \"nbf\" property.'));\n }\n\n try {\n validateOptions(options);\n }\n catch (error) {\n return failure(error);\n }\n\n if (!options.allowInvalidAsymmetricKeyTypes) {\n try {\n validateAsymmetricKey(header.alg, secretOrPrivateKey);\n } catch (error) {\n return failure(error);\n }\n }\n\n const timestamp = payload.iat || Math.floor(Date.now() / 1000);\n\n if (options.noTimestamp) {\n delete payload.iat;\n } else if (isObjectPayload) {\n payload.iat = timestamp;\n }\n\n if (typeof options.notBefore !== 'undefined') {\n try {\n payload.nbf = timespan(options.notBefore, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.nbf === 'undefined') {\n return failure(new Error('\"notBefore\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n if (typeof options.expiresIn !== 'undefined' && typeof payload === 'object') {\n try {\n payload.exp = timespan(options.expiresIn, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.exp === 'undefined') {\n return failure(new Error('\"expiresIn\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n Object.keys(options_to_payload).forEach(function (key) {\n const claim = options_to_payload[key];\n if (typeof options[key] !== 'undefined') {\n if (typeof payload[claim] !== 'undefined') {\n return failure(new Error('Bad \"options.' + key + '\" option. The payload already has an \"' + claim + '\" property.'));\n }\n payload[claim] = options[key];\n }\n });\n\n const encoding = options.encoding || 'utf8';\n\n if (typeof callback === 'function') {\n callback = callback && once(callback);\n\n jws.createSign({\n header: header,\n privateKey: secretOrPrivateKey,\n payload: payload,\n encoding: encoding\n }).once('error', callback)\n .once('done', function (signature) {\n // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version\n if(!options.allowInsecureKeySizes && /^(?:RS|PS)/.test(header.alg) && signature.length < 256) {\n return callback(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`))\n }\n callback(null, signature);\n });\n } else {\n let signature = jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding});\n // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version\n if(!options.allowInsecureKeySizes && /^(?:RS|PS)/.test(header.alg) && signature.length < 256) {\n throw new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`)\n }\n return signature\n }\n};\n","module.exports = {\n decode: require('./decode'),\n verify: require('./verify'),\n sign: require('./sign'),\n JsonWebTokenError: require('./lib/JsonWebTokenError'),\n NotBeforeError: require('./lib/NotBeforeError'),\n TokenExpiredError: require('./lib/TokenExpiredError'),\n};\n"],"names":["exports","buffer","base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","i","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","parts","maxChunkLength","len2","ieee754","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","value","c","rt","base64","ieee754$1","customInspectSymbol","Buffer","SlowBuffer","K_MAX_LENGTH","GlobalUint8Array","GlobalArrayBuffer","GlobalSharedArrayBuffer","typedArraySupport","proto","createBuffer","length","buf","arg","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","b","fromObject","assertSize","size","alloc","fill","encoding","checked","string","actual","fromArrayLike","array","arrayView","copy","byteOffset","obj","numberIsNaN","a","x","y","list","pos","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","str","max","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","j","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","out","hexSliceLookupTable","bytes","newBuf","checkOffset","ext","noAssert","mul","defineBigIntMethod","validateNumber","first","last","boundsError","lo","hi","checkInt","min","maxBytes","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","errors","E","sym","getMessage","Base","name","range","input","msg","received","addNumericalSeparator","checkBounds","type","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","require$$0","copyProps","key","module","SafeBuffer","receiver","args","warning","eventsModule","once","listener","that","doError","events","er","err","handler","listeners","prepend","existing","w","state","wrapped","position","originalListener","keys","unwrap","evlistener","emitter","index","resolve","reject","errorListener","resolver","flags","wrapListener","inherits_browserModule","ctor","superCtor","TempCtor","streamBrowser","shams","symObj","symVal","syms","descriptor","hasSymbols","hasProto","toStr","arrLike","joiner","implementation","bound","binder","result","boundLength","boundArgs","Empty","bind","undefined","require$$1","require$$2","require$$3","$SyntaxError","require$$4","$TypeError","require$$5","require$$6","expressionSyntax","$gOPD","require$$7","require$$8","getProto","doEval","gen","require$$9","require$$10","match","number","quote","subString","allowMissing","intrinsicName","alias","intrinsicBaseName","intrinsic","intrinsicRealName","skipFurtherCaching","isOwn","part","desc","GetIntrinsic","$defineProperty","gopd","property","nonEnumerable","nonWritable","nonConfigurable","loose","gOPD","functionLengthIsConfigurable","functionLengthIsWritable","setFunctionLength","$apply","$call","$reflectApply","$max","originalFunction","func","applyBind","callBind","$indexOf","callBound","hasToStringTag","$toString","isArguments","fnToStr","generatorFunc","_","fnStr","isCallable","strClass","hasOwnProperty","iterator","object","k","forEach","thisArg","g","global","availableTypedArrays","typedArray","superProto","getter","whichTypedArray","tag","isArgumentsObject","isGeneratorFunction","isTypedArray","uncurryThis","f","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isPromise","isArrayBufferView","isDataView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","isMapToString","isMap","isSetToString","isSet","isWeakMapToString","isWeakMap","isWeakSetToString","isWeakSet","isArrayBufferToString","isArrayBuffer","isDataViewToString","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isBoxedPrimitive","isAnyArrayBuffer","method","getOwnPropertyDescriptors","descriptors","formatRegExp","isString","objects","inspect","isNull","isObject","process","warned","deprecated","debugs","debugEnvRegex","define_process_env_default","debugEnv","set","pid","opts","ctx","stylizeNoColor","isBoolean","isUndefined","stylizeWithColor","formatValue","styleType","style","arrayToHash","hash","idx","recurseTimes","isFunction","primitive","formatPrimitive","visibleKeys","isError","formatError","isRegExp","isDate","base","braces","isArray","formatArray","formatProperty","reduceToSingleString","simple","isNumber","l","line","prev","cur","ar","isNullOrUndefined","isSymbol","re","objectToString","isPrimitive","o","pad","months","timestamp","time","origin","add","prop","kCustomPromisifiedSymbol","original","promiseResolve","promiseReject","promise","callbackifyOnRejected","reason","cb","newReason","callbackify","callbackified","maybeCb","self","rej","ownKeys","enumerableOnly","symbols","_objectSpread","source","_defineProperty","_toPropertyKey","_classCallCheck","instance","Constructor","_defineProperties","props","_createClass","protoProps","staticProps","_toPrimitive","hint","prim","_require","_require2","custom","copyBuffer","BufferList","v","entry","p","hasStrings","nb","options","destroy","_this","readableDestroyed","writableDestroyed","emitErrorNT","emitCloseNT","emitErrorAndCloseNT","undestroy","errorOrDestroy","stream","rState","wState","destroy_1","_inheritsLoose","subClass","superClass","codes","createErrorType","message","arg1","arg2","arg3","NodeError","_Base","oneOf","expected","thing","startsWith","search","endsWith","this_len","includes","determiner","ERR_INVALID_OPT_VALUE","highWaterMarkFrom","isDuplex","duplexKey","getHighWaterMark","hwm","browser","_stream_writable","Writable","CorkedRequest","onCorkedFinish","Duplex","WritableState","internalUtil","Stream","OurUint8Array","_uint8ArrayToBuffer","chunk","_isUint8Array","destroyImpl","_require$codes","ERR_INVALID_ARG_TYPE","ERR_METHOD_NOT_IMPLEMENTED","ERR_MULTIPLE_CALLBACK","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","noDecode","onwrite","current","realHasInstance","writeAfterEnd","validChunk","isBuf","writeOrBuffer","clearBuffer","decodeChunk","newChunk","doWrite","writev","onwriteError","sync","finishMaybe","onwriteStateUpdate","finished","needFinish","afterWrite","onwriteDrain","holder","count","allBuffers","endWritable","callFinal","prefinish","need","corkReq","objectKeys","_stream_duplex","Readable","onend","onEndNT","enc","retried","nenc","StringDecoder","r","byte","total","ERR_STREAM_PREMATURE_CLOSE","callback","called","_len","_key","noop","isRequest","eos","readable","writable","onlegacyfinish","onfinish","writableEnded","readableEnded","onerror","onclose","onrequest","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","done","readAndResolve","iter","data","onReadable","wrapForNext","lastPromise","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","error","_this2","createReadableStreamAsyncIterator","_Object$create","_stream_readable","ReadableState","EElistenerCount","debugUtil","debug","ERR_STREAM_PUSH_AFTER_EOF","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","kProxyEvents","prependListener","event","skipChunkCheck","readableAddChunk","addToFront","onEofChunk","chunkInvalid","addChunk","maybeReadMore","emitReadable","decoder","content","MAX_HWM","computeNewHighWaterMark","howMuchToRead","nOrig","endReadable","doRead","fromList","emitReadable_","flow","maybeReadMore_","dest","pipeOpts","doEnd","endFn","unpipe","onunpipe","unpipeInfo","cleanup","ondrain","pipeOnDrain","cleanedUp","ondata","indexOf","dests","ev","nReadingNextTick","updateReadableListening","resume","resume_","paused","require$$11","endReadableNT","iterable","require$$12","xs","_stream_transform","Transform","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","rs","err2","_stream_passthrough","PassThrough","ERR_MISSING_ARGS","destroyer","reading","writing","closed","destroyed","call","pipe","to","popCallback","streams","pipeline","destroys","inherits","didOnEnd","util","DataStream","oldBrowser","crypto","browserModule","randomBytes","generated","prefix","HashBase","blockSize","block","carry","digest","ARRAY16","MD5","M","rotl","RIPEMD160","words","al","bl","cl","dl","el","br","cr","dr","tl","tr","t","Hash","finalSize","accum","assigned","remainder","rem","bits","lowBits","highBits","K","W","rotl5","rotl30","ft","H","sha","Sha256","z","maj","sigma0","sigma1","h","T1","T2","sha256","sha224","xl","ah","bh","ch","dh","eh","fh","gh","hh","fl","gl","hl","xh","gamma0","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","sha512","SHA512","sha384","sha_jsModule","algorithm","Algorithm","CipherBase","hashMode","inputEnc","outputEnc","outData","next","fin","alg","ZEROS","Hmac","ipad","opad","md5","blocksize","iterations","keylen","defaultEncoding","toBuffer","checkParameters","saltLen","ipad1","shaFunc","rmd160Func","password","salt","hmac","DK","block1","destPos","hLen","T","U","algo","prom","nextTick","resp","utils","off","inL","inR","outL","outR","shift","sb","group","assert","Cipher","inputOff","outputOff","DES","des","kL","kR","inp","inOff","outOff","lStart","rStart","keyL","keyR","iv","CBC","cbc","k1","k2","k3","modes","modeName","mode","xor","decrypt","encryptByte","byteParam","bit","getBlock","incr32","item","chunkNum","keySchedule","SUB_MIX","SBOX","nRounds","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","t0","t1","t2","t3","ksRow","round","INV_SBOX","INV_SUB_MIX","xi","sx","x2","x4","x8","keyWords","keySize","ksRows","invKeySchedule","ik","ksR","tt","m1","aes","toArray","GHASH","Vi","Zi","lsbVi","abl","ck","ghash","toPad","ivBits","tail","StreamCipher","rump","keyBits","ivLen","keyLen","used","keyStart","ivStart","MODES","AuthCipher","ebtk","Splitter","setTo","padBuff","createCipheriv","suite","config","createCipher","autoPadding","padded","createDecipheriv","createDecipher","ciphers","getCiphers","BN","endian","left","right","parseHex4Bits","parseHexByte","lowerBound","parseLength","parseBase","limbLen","limbPow","mod","word","pow","zeros","groupSizes","groupBases","padding","groupSize","groupBase","ArrayType","reqLength","q","toBitArray","wbit","width","bytesNeeded","bitsLeft","cmp","smallMulTo","ncarry","rword","maxJ","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","fftm","FFTM","N","rb","rbt","rws","iws","rtws","itws","rtwdf","itwdf","rtwdf_","itwdf_","ie","ro","io","rx","odd","ws","ph","rwst","iwst","nrws","nrwst","niwst","rmws","carryMask","newCarry","extended","mask","maskedWords","bhi","bhiBits","diff","qj","positive","div","dm","half","r2","acc","A","B","C","D","yp","xp","im","jm","x1","delta","negative","Red","primes","MPrime","rlen","K256","outLen","P224","P192","P25519","prime","mod3","one","nOne","lpow","inv","windowSize","wnd","currentLen","Mont","u","this","brorandModule","Rand","rand","bn","brorand","MillerRabin","min_bytes","stop","red","rone","n1","rn1","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","ONE","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","sqrt","n2","SEVEN","DH","setPublicKey","pub","setPrivateKey","priv","primeCache","checkPrime","generator","hex","malleable","other","secret","front","formatReturnValue","generatePrime","getDiffieHellman","ENCODINGS","createDiffieHellman","genc","processNextickArgsModule","toString","pna","asyncWrite","writableHwm","defaultHwm","valid","readableHwm","needMoreData","increasedAwaitDrain","fromListPartial","copyFromBufferString","copyFromBuffer","move","allocate","postfix","isNegNum","blinder","crt","blinds","blinded","c1","c2","qinv","m2","zero2","toHex","minAssert","minUtils","getNAF","naf","getJSF","jsf","d1","d2","m8","m14","m24","u1","u2","cachedProperty","computer","parseBytes","intFromLE","conf","adjustCount","doubles","I","repr","nafW","nafPoints","defW","points","coeffs","jacobianResult","wndWidth","comb","ja","jb","zero","curve","compact","power","precomputed","step","dbl","beta","lambda","betas","lambdas","basis","vec","tinv","ntinv","l1","l2","aprxSqrt","y1","y2","prevR","len1","v1","v2","p1","p2","q1","q2","isOdd","point","ax","rhs","npoints","ncoeffs","split","Point","isRed","pre","endoMul","obj2point","nx","ny","ys1","dyinv","_precompute","negate","zinv","zinv2","ay","pz2","z2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","zz","mm","ee","yyu4","kbase","z3","pz3","zs","xc","aa","bb","da","lhs","nt","zi","rotr32","rotl32","sum32","sum32_3","sum32_4","sum32_5","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","BlockHash","common","ft_1","ch32","maj32","s0_256","s1_256","g0_256","g1_256","shaCommon","SHA256","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","yh","yl","zh","zl","Ah","Bh","Ch","Dh","Eh","curves","PresetCurve","defineCurve","entropy","nonce","pers","seed","kmac","entropyEnc","addEnc","temp","KeyPair","ec","signature","Signature","initial","octetLen","slen","octets","backHalf","HmacDRBG","EC","drbg","ns2","truncOnly","bkey","ns1","kp","kpX","recoveryParam","sinv","isYOdd","isSecondKey","rInv","Q","Qprime","eddsa","params","lastIx","sig","R","Rencoded","s_","S","SG","RplusAh","normed","xIsOdd","elliptic","context","iframe","win","wEval","wExecScript","winKeys","asn1","api","body","Entity","named","entity","reporter","save","restore","enterKey","exitKey","leaveKey","path","enterObject","leaveObject","now","inherited","elem","wrapResult","rethrow","Reporter","DecoderBuffer","fail","EncoderBuffer","tags","methods","overrided","Node","parent","stateProps","cstate","clone","child","children","newKey","present","prevKey","prevObj","explicit","node","cls","constants","map","bignum","der","DERDecoder","DERNode","der_1","any","decodedTag","derDecodeTag","derDecodeLen","possibleEnd","unused","raw","numstr","printstr","values","relative","identifiers","ident","subident","second","year","mon","day","hour","sec","oct","tagStr","PEMDecoder","pem","lines","label","decoders","DEREncoder","encodedTag","encodeTag","header","lenOctets","id","objid","two","date","numArray","dataBuffer","PEMEncoder","encoders","AlgorithmIdentifier","asn1_1","fixProc","okey","decrypted","cipherText","cipherKey","cipher","match2","iters","parseKeys","stripped","subtype","ndata","createHmac","RSA_PKCS1_PADDING","sign","hashType","signType","ecSign","dsaSign","curveId","bits2int","kv","getKey","makeKey","makeR","toDER","hlen","hbits","bits2octets","obits","signModule","verify","ecVerify","dsaVerify","padNum","pubkey","unpacked","checkValue","montp","createHash","algorithms","Sign","Verify","sigBuffer","createSign","createVerify","ECDH","aliases","format","inenc","otherPub","_priv","mgf","withPublic","paddedMsg","publicEncrypt","publicKey","reverse","oaep","pkcs1","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","cache","privateDecrypt","privateKey","zBuffer","db","compare","status","dif","ourBuf","uint","algos","algoKeys","hashes","rf","getParamBytesForAlg","paramBytes","maxEncodedParamLength","inputLength","seqLength","rLength","rOffset","sLength","sOffset","rPadding","sPadding","needsSign","signatureBytes","rsBytes","shortLength","base64url","template","errMsg","computedSig","signer","verifier","inner","jwa","signerFactories","verifierFactories","payload","encodedHeader","encodedPayload","secretOrKey","securedInput","SignStream","secretStream","jwsSig","VerifyStream","jws","decode","jwt","decoded","JsonWebTokenError","NotBeforeError","TokenExpiredError","expiredAt","ms","parse","msAbs","isPlural","timespan","iat","milliseconds","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","safeRe","LETTERDASHNUMBER","safeRegexReplacements","makeSafeRegex","token","createToken","isGlobal","safe","parseOptions","compareIdentifiers","anum","bnum","SemVer","version","release","identifier","identifierBase","prerelease","semver","throwErrors","clean","inc","version1","version2","comparison","v1Higher","highVersion","lowVersion","highHasPre","major","minor","patch","rcompare","compareLoose","compareBuild","versionA","versionB","sort","rsort","gt","lt","eq","neq","gte","lte","op","coerce","coerceRtlRegex","build","firstKey","Range","Comparator","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","hr","hyphenReplace","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","rangeList","comp","parseComparator","replaceGTE0","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","LRU","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","pr","replaceCaret","replaceXRange","gtlt","xM","xm","anyX","incPr","$0","fM","fm","fp","fpr","fb","tM","tm","tp","tpr","allowed","ANY","satisfies","toComparators","maxSatisfying","versions","maxSV","rangeObj","minSatisfying","minSV","minVersion","minver","setMin","comparator","compver","validRange","outside","hilo","gtfn","ltefn","ltfn","ecomp","high","low","gtr","ltr","intersects","r1","ranges","simplified","subset","dom","sawNonNull","OUTER","simpleSub","simpleDom","isSub","eqSet","gtltComp","higher","lower","hasDomLT","hasDomGT","needDomLTPre","needDomGTPre","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","require$$39","require$$40","validateAsymmetricKey","keyType","allowedAlgorithms","keyCurve","allowedCurve","hashAlgorithm","mgf1HashAlgorithm","saltLength","PS_SUPPORTED","KeyObject","createSecretKey","jwtString","secretOrPublicKey","clockTimestamp","decodedToken","getSecret","secretCallback","hasSignature","audiences","targetAudience","audience","maxAgeTimestamp","INFINITY","MAX_INTEGER","NAN","stringTag","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","iteratee","predicate","fromIndex","fromRight","overArg","transform","objectProto","skipIndexes","Ctor","collection","guard","toInteger","isObjectLike","toFinite","toNumber","isBinary","isInteger","isPlainObject","schema","allowUnknown","parameterName","validator","secretOrPrivateKey","isObjectPayload","failure","invalid_options","opt","claim"],"mappings":"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AAK,IAAI,KACrBA,EAAK,OAASA,EAAK,IAAI,OACvBA,EAAK,OAASA,EAAK,IAAI,OACvBA,EAAK,OAASA,EAAK,IAAI,OACvBA,EAAK,OAASA,EAAK,IAAI,OACvBA,EAAK,UAAYA,EAAK,OAAO,wICd7B,UAAiB,CACf,QAAS,CACP,KAAM,EACN,OAAQ,CACN,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,gEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,CACF,CACF,EACD,IAAK,CACH,IAAK,EACL,OAAQ,CACN,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,iEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,kEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,iEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,EACD,CACE,mEACA,kEACD,CACF,CACF,2BCxwBH,IAAI49B,EAAS/3C,EAETma,EAAO3N,OACP0iC,EAAQ9+B,MACRslB,EAAQrlB,QAER8lB,EAAST,EAAM,OAEnB,SAASsiB,EAAY94B,EAAS,CACxBA,EAAQ,OAAS,QACnB,KAAK,MAAQ,IAAIgwB,EAAM,MAAMhwB,CAAO,EAC7BA,EAAQ,OAAS,UACxB,KAAK,MAAQ,IAAIgwB,EAAM,QAAQhwB,CAAO,EAEtC,KAAK,MAAQ,IAAIgwB,EAAM,KAAKhwB,CAAO,EACrC,KAAK,EAAI,KAAK,MAAM,EACpB,KAAK,EAAI,KAAK,MAAM,EACpB,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265]}