{"version":3,"file":"js/684-14ab94d2e78ca6649e3b.js","mappings":"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EACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINP,IAAK,CACHjqB,IAAK,EACLwqB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,m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","sources":["webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/brorand/index.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/browserify-sign/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-sign/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/browserify-sign/node_modules/safe-buffer/index.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/des.js/lib/des.js","webpack:///./node_modules/des.js/lib/des/cbc.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/des.js/lib/des/ede.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/elliptic/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/evp_bytestokey/node_modules/safe-buffer/index.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/hash-base/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/hash-base/node_modules/safe-buffer/index.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/hash.js/lib/hash/sha.js","webpack:///./node_modules/hash.js/lib/hash/sha/1.js","webpack:///./node_modules/hash.js/lib/hash/sha/224.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/hash.js/lib/hash/sha/384.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/parse-asn1/node_modules/safe-buffer/index.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/pbkdf2/lib/to-buffer.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/randombytes/node_modules/safe-buffer/index.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/randomfill/node_modules/safe-buffer/index.js","webpack:///./node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack:///./node_modules/readable-stream/node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/safer-buffer/safer.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/stream-browserify/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/uuid4/index.js"],"sourcesContent":["'use strict';\n\nconst 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","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst 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 const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(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(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(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","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-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.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\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 const 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 const 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 (!EncoderBuffer.isEncoderBuffer(item))\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.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(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","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst 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\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst 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, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\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\nconst 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 const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const 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 const 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 const state = this._baseState;\n\n // Filter children and args\n const 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 const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const 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 const 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 const state = this._baseState;\n const 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 const 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 const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const 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 const 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 const 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 const state = this._baseState;\n const 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 const 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 const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const 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 const 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 const 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 let result = state['default'];\n let present = true;\n\n let 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 let 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 const 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 let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const 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 // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\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 const 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 const 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 const 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 const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const 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 const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const 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 const 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 let 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 let content = null;\n let 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 const 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 const 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 const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const 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 if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const 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 const state = this._baseState;\n\n const 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 const 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","'use strict';\n\nconst 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 const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const 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 const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const 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 const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const 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 const 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","'use strict';\n\n// Helper\nfunction reverse(map) {\n const 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 const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = 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 = reverse(exports.tag);\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const 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 const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../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 (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const 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 const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let 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 const state = buffer.save();\n const 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 for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let 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 const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const 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 const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let 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 const 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 const 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 let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n 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 const first = (identifiers[0] / 40) | 0;\n const 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 let 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 const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n 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() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const 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 const raw = buffer.raw();\n let 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 let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let 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 const 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 let 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 const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst 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 const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const 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 const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../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 Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(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 let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let 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 const buf = Buffer.alloc(str.length * 2);\n for (let 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 (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let 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 let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let 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 let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\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.getUTCFullYear() % 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 const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(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 let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let 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(Buffer.from(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 const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const 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 let 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","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst 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 const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let 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","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.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","(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","// 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 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 ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var 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 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 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","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var 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\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var 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","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var 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 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","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['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 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 // '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","module.exports = require('./browser/algorithms.json')\n","var 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 if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\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 if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, 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","// 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\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 } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\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 = [0x30, total, 0x02, r.length]\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","// 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 } else {\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++\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) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\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","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","/*! 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","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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\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","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","'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","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'\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","'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\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","'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');\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}\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 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 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 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.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","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","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 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","'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","'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 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 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 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 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 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 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 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 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 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 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 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 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 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","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 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 naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var 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","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","// 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","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","/* 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","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-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","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","/*! 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","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","'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 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","'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\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');\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 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 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');\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\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');\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 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 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","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.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\nexports.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","'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","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","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 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","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\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 this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\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 var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","var 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\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\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","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\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","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 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 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\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","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","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","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","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 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","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","'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","/*! 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","'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","/*! 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","'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","// 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// 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'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\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 Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\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}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\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\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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\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; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\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); // 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\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}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // 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\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; // 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\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\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 if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\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\n Stream.call(this);\n}\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\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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\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.\n\n\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\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\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\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\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\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 } // 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\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\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\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\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\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\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\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\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 } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\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; // 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\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 n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\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 // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\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; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // 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\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 = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\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; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\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\n if (!state.emittedReadable) {\n state.emittedReadable = true;\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.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\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\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\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.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\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) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\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.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\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\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\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\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\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 } // 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\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\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; // 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\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\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\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\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 } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\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\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 = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\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; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\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, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\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}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\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; // Try start flowing on next tick if stream isn't explicitly paused\n\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\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\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\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\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\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\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; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\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\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\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.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\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 stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\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\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\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 } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\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}); // exposed for testing purposes only.\n\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}); // 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.\n\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}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\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\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\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\n return from(Readable, iterable, opts);\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\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// 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'use strict';\n\nmodule.exports = Transform;\n\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;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // 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\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 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 }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // 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\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\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}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\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.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\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\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}; // 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.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\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 Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // 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\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// 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'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} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\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/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\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;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // 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\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // 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\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // 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\n this.sync = true; // 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\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\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})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\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}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // 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 // 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 // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\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); // legacy.\n\n this.writable = true;\n\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\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\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.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\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\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\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 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};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\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 ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\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});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\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 get() {\n return this._writableState.highWaterMark;\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.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\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\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\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 (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}\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 process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\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); // this can emit finish, but finish must\n // always follow error\n\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 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\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\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} // 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.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\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 var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\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--; // 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\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 ERR_METHOD_NOT_IMPLEMENTED('_write()'));\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); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\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});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\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}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\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\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\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\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\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\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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\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');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\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}\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\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\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 } // 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\n\n var lastPromise = this[kLastPromise];\n var promise;\n\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\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\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\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\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\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\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]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\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\n while (p = p.next) {\n ret += s + p.data;\n }\n\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\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\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\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\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\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\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\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\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\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\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\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\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 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\n return this;\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\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\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 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\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\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}\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\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 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}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\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\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\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\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\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\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\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}\n\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\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}\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;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\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; // request.destroy just do .end - .abort is what we want\n\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}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\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}\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\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\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}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\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\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\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\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}","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');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\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","/* 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","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\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","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","/*\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 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","/**\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","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 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","// 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","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","// 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}","\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","'use strict';\r\n\r\nvar crypto = require('crypto')\r\n ,uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/\r\n ;\r\n\r\nexports = module.exports = generateUuid;\r\nexports.async = generateUuidAsync;\r\nexports.sync = generateUuidSync;\r\nexports.valid = generateUuid;\r\n\r\n\r\nfunction isUUID(uuid) {\r\n return uuidPattern.test(uuid);\r\n}\r\n\r\n\r\nfunction generateUuidSync() {\r\n var rnd = crypto.randomBytes(16);\r\n rnd[6] = (rnd[6] & 0x0f) | 0x40;\r\n rnd[8] = (rnd[8] & 0x3f) | 0x80;\r\n rnd = rnd.toString('hex').match(/(.{8})(.{4})(.{4})(.{4})(.{12})/);\r\n rnd.shift();\r\n return rnd.join('-');\r\n}\r\n\r\nfunction generateUuidAsync(callback) {\r\n crypto.randomBytes(16, function(err, rnd) {\r\n rnd[6] = (rnd[6] & 0x0f) | 0x40;\r\n rnd[8] = (rnd[8] & 0x3f) | 0x80;\r\n rnd = rnd.toString('hex').match(/(.{8})(.{4})(.{4})(.{4})(.{12})/);\r\n rnd.shift();\r\n callback(null, rnd.join('-'));\r\n });\r\n}\r\n\r\nfunction generateUuid(callback) {\r\n if (typeof callback !== 'function') return generateUuidSync();\r\n return generateUuidAsync(callback);\r\n}\r\n"],"names":["asn1","exports","bignum","define","base","constants","decoders","encoders","inherits","Entity","name","body","this","prototype","_createNamed","Base","Generated","entity","_initNamed","call","_getDecoder","enc","hasOwnProperty","decode","data","options","_getEncoder","encode","reporter","Reporter","Buffer","DecoderBuffer","isBuffer","offset","length","error","EncoderBuffer","value","Array","isArray","map","item","isEncoderBuffer","byteLength","isDecoderBuffer","constructor","save","restore","isEmpty","readUInt8","skip","raw","res","fail","bytes","_reporterState","slice","join","out","alloc","forEach","write","copy","Node","assert","tags","methods","concat","parent","state","_baseState","children","tag","args","reverseArgs","choice","optional","any","obj","use","useDecoder","key","explicit","implicit","contains","_wrap","module","stateProps","clone","cstate","prop","method","push","apply","arguments","_init","filter","child","equal","_useArgs","arg","Object","keys","Error","def","val","num","newKey","_decode","input","wrapResult","prevObj","result","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","e","enterObject","_decodeTag","start","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","test","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","match","some","node","type","_createEncoderBuffer","_encode","_encodeValue","undefined","_skipDefault","content","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","str","_isPrintstr","errors","ReporterError","msg","rethrow","pathLen","index","prev","now","err","inherited","elem","message","stack","partial","captureStackTrace","reverse","tagClass","tagClassByName","tagByName","_reverse","der","DERDecoder","tree","DERNode","derDecodeTag","buf","oct","tagStr","derDecodeLen","len","i","j","buffer","decodedTag","_skipUntilEnd","decoder","possibleEnd","unused","String","fromCharCode","readUInt16BE","numstr","toString","printstr","values","relative","identifiers","ident","subident","first","second","tmp","year","mon","day","hour","min","sec","Date","UTC","pem","PEMDecoder","lines","split","label","toUpperCase","re","end","base64","replace","from","DEREncoder","two","encodedTag","encodeTag","header","lenOctets","writeUInt16BE","charCodeAt","id","splice","size","objid","time","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","toArray","sign","unshift","dataBuffer","defaultBuffer","PEMEncoder","p","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","arr","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","Uint8Array","code","indexOf","output","ctor","superCtor","super_","TempCtor","BN","number","endian","isBN","negative","words","red","wordSize","window","parseHex4Bits","string","c","parseHexByte","lowerBound","r","parseBase","mul","Math","max","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","ceil","w","off","strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","dest","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","self","a","b","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","x","y","mulTo","hncarry","bigMulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","outLen","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","u","Rand","rand","generate","_rand","getBytes","getByte","crypto","getRandomValues","msCrypto","randomBytes","asUInt32Array","readUInt32BE","scrubVec","v","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","d","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","blockSize","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","allocUnsafe","writeUInt32BE","decryptBlock","m1","scrub","aes","Transform","GHASH","incr32","StreamCipher","iv","decrypt","_cipher","ck","_ghash","_finID","ghash","toPad","update","ivBits","tail","writeUIntBE","calcIv","_prev","_cache","_secCache","_decrypt","_alen","_len","_mode","_authTag","_called","_update","chunk","rump","encrypt","_final","final","xorTest","getAuthTag","setAuthTag","setAAD","ciphers","deciphers","modes","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","getCiphers","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","cache","suite","password","config","toLowerCase","TypeError","thing","get","flush","last","padded","unpad","setAutoPadding","setTo","autoPadding","PADDING","equals","padBuff","writeUInt8","ZEROES","fromArray","block","_multiply","lsbVi","Vi","Zi","abl","bl","pad","encryptStart","encryptByte","byteParam","shiftIn","getBlock","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","DES","aesModes","desModes","keyLen","ivLen","CipherBase","des","instantiate","EDE","opts","modeName","_des","create","des3","getr","priv","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","c2","qinv","coefficient","exponent1","m2","exponent2","move","src","_move","Symbol","for","modrn","allocate","_toArrayLikeLE","position","_toArrayLikeBE","isNegNum","createHash","stream","verify","algorithms","Sign","algorithm","Writable","_hashType","hash","_hash","_tag","_signType","Verify","createSign","createVerify","_write","done","digest","sig","createHmac","EC","parseKeys","curves","getKey","algo","hlen","hbits","bits2int","bits2octets","fill","obits","makeKey","kv","makeR","hashType","signType","curve","curveId","keyFromPrivate","privateKey","toDER","ecSign","params","priv_key","H","dsaSign","checkValue","pub","pubkey","subjectPrivateKey","ecVerify","pub_key","unpacked","signature","montp","dsaVerify","padNum","enumerable","writable","configurable","copyProps","dst","SafeBuffer","encodingOrOffset","allocUnsafeSlow","encoding","SlowBuffer","ieee754","customInspectSymbol","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","setPrototypeOf","isEncoding","actual","fromString","ArrayBuffer","isView","arrayView","isInstance","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","checked","numberIsNaN","fromObject","toPrimitive","assertSize","array","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","defineProperty","poolSize","_isBuffer","compare","list","pos","set","swap16","swap32","swap64","toLocaleString","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","readUintBE","readUIntBE","readUint8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUint8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","E","sym","getMessage","super","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","received","isInteger","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","alphabet","table","i16","fn","BufferBigIntNotDefined","StringDecoder","hashMode","_finalOrDigest","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_toString","_transform","_flush","fin","elliptic","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","ec","formatReturnValue","bn","p256","secp256r1","secp192r1","p384","p521","generateKeys","format","genKeyPair","getPublicKey","computeSecret","other","inenc","keyFromPublic","getPublic","getPrivate","getX","getPrivateKey","setPublicKey","_importPublic","setPrivateKey","_priv","_importPrivate","MD5","RIPEMD160","sha","Hash","alg","Legacy","md5","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","dh","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","utils","CBCState","_cbcInit","_cbcState","inp","inOff","outOff","superProto","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","count","_finalEncrypt","_finalDecrypt","_pad","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","lStart","rStart","keyL","keyR","expand","substitute","rip","EDEState","k1","k2","k3","_edeState","inL","inR","outL","outR","pc2table","sTable","permuteTable","padSplit","group","generatePrime","DH","ENCODINGS","gen","generator","genc","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","_pub","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","hex","rem","simpleSieve","fermatTest","checkPrime","__gen","_gen","secret","getPrime","front","getGenerator","findPrime","ONE","TWO","FIVE","FOUR","_getPrimes","n2","version","eddsa","getNAF","getJSF","BaseCurve","conf","zero","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","naf","I","step","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","pointFromX","encodeCompressed","compact","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","EdwardsCurve","twisted","mOneA","dd","oneC","Point","zOne","_mulA","_mulC","rhs","lhs","y2","pointFromY","isInfinity","normalize","fromJSON","_extDbl","f","nx","ny","nt","nz","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","zi","eqXToP","xc","short","edwards","MontCurve","i4","a24","aa","bb","diffAdd","da","cb","jumlAdd","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","inf","JPoint","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","_endoWnafMulAdd","npoints","ncoeffs","pre","endoMul","parse","obj2point","ys1","dyinv","_precompute","negate","zinv","zinv2","ay","pz2","z2","u1","u2","h2","h3","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","zs","PresetCurve","defineCurve","sha256","sha384","sha512","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","fromPublic","drbg","pers","persEnc","entropy","hmacStrength","entropyEnc","nonce","ns2","_truncateToN","truncOnly","bkey","ns1","iter","kp","kpX","recoveryParam","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","privEnc","pubEnc","reason","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","log","LN2","slen","backHalf","parseBytes","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","R","Rencoded","encodePoint","s_","pubBytes","S","makeSignature","SG","intFromLE","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","cachedProperty","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","toHex","minAssert","minUtils","zero2","m8","d1","d2","m14","m24","computer","ReflectOwnKeys","Reflect","ReflectApply","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","isNaN","EventEmitter","init","once","emitter","Promise","resolve","reject","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","events","existing","warning","newListener","emit","warned","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","addEventListener","wrapListener","removeEventListener","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","listeners","addListener","prependListener","prependOnceListener","originalListener","pop","spliceOne","removeAllListeners","rawListeners","eventNames","salt","keyBits","used","keyStart","ivStart","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","callback","prefix","throwIfNotStringOrBuffer","_digest","common","ripemd","hmac","sha1","sha224","ripemd160","BlockHash","pending","pendingTotal","outSize","padLength","_delta8","_delta32","join32","inner","outer","rotl32","sum32","sum32_3","sum32_4","K","Kh","Ah","Bh","Ch","Dh","Eh","T","rh","sh","toHex32","split32","shaCommon","sum32_5","ft_1","sha1_K","SHA1","W","SHA256","SHA224","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","SHA512","SHA384","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","ah","al","bh","ch","cl","dl","eh","el","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","rotr32","p32","isSurrogatePair","htonl","zero8","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","seed","_hmac","kmac","reseed","addEnc","temp","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","ARRAY16","_a","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","brorand","MillerRabin","_randbelow","min_bytes","_randrange","stop","rone","n1","rn1","getDivisor","certificate","RSAPrivateKey","seq","int","RSAPublicKey","PublicKey","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","PrivateKey","EncryptedPrivateKeyInfo","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECPrivateKey","ECParameters","namedCurve","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherText","cipherKey","cipher","match2","aesid","fixProc","compat","passphrase","subtype","ndata","stripped","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","kde","kdeparams","iters","keylen","parameters","ZERO_BUF","nextTick","checkParameters","defaultEncoding","sync","subtle","toBrowser","checks","getNextTick","process","queueMicrotask","setImmediate","setTimeout","browserPbkdf2","iterations","importKey","then","deriveBits","promise","resolvePromise","browser","prom","catch","checkNative","resp","MAX_ALLOC","sizes","rmd160","saltLen","shaFunc","rmd160Func","getDigest","ipad1","ipad2","run","DK","block1","destPos","hLen","U","i2ops","mgf","withPublic","zBuffer","iHash","maskedSeed","maskedDb","db","dif","oaep","status","ps","pkcs1","publicKey","paddedMsg","hLen2","dblen","cur","nonZero","MAX_BYTES","MAX_UINT32","generated","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","codes","createErrorType","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","__proto__","oneOf","expected","determiner","search","this_len","substring","endsWith","objectKeys","Duplex","Readable","allowHalfOpen","readable","onend","_writableState","ended","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","PassThrough","ReadableState","EElistenerCount","Stream","OurUint8Array","debug","debugUtil","debuglog","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","awaitDrain","readingMore","_read","destroy","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","head","clear","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","xs","nOrig","doRead","pipe","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","pipeOnDrain","pause","event","dests","ev","wrap","_this","asyncIterator","_fromList","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","prefinish","err2","CorkedRequest","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","hasInstance","object","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_this2","_Object$create","iterator","enumerableOnly","symbols","getOwnPropertyDescriptor","_defineProperties","props","descriptor","custom","instance","Constructor","_classCallCheck","protoProps","staticProps","hasStrings","_getString","_getBuffer","nb","source","getOwnPropertyDescriptors","defineProperties","_objectSpread","depth","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","noop","eos","called","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","abort","isRequest","ERR_MISSING_ARGS","destroyer","closed","to","popCallback","streams","destroys","reduce","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","pipeline","zr","sl","sr","hr","_e","fn1","fn2","fn3","fn4","fn5","ar","br","cr","dr","tl","tr","safer","Safer","kStringMaxLength","binding","MAX_LENGTH","MAX_STRING_LENGTH","finalSize","_finalSize","accum","assigned","remainder","lowBits","highBits","Algorithm","Sha","_w","rotl30","ft","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","EE","_isStdio","didOnEnd","cleanup","localStorage","trace","generateUuidSync","rnd","generateUuidAsync","generateUuid","async","valid"],"sourceRoot":""}