{"version":3,"sources":["../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/axios.js","../node_modules/axios/index.js","../node_modules/bn.js/lib/bn.js","../node_modules/@ethersproject/logger/src.ts/_version.ts","../node_modules/@ethersproject/logger/src.ts/index.ts","../node_modules/@ethersproject/bytes/src.ts/_version.ts","../node_modules/@ethersproject/bytes/src.ts/index.ts","../node_modules/@ethersproject/bignumber/src.ts/_version.ts","../node_modules/@ethersproject/bignumber/src.ts/bignumber.ts","../node_modules/@ethersproject/bignumber/src.ts/index.ts","../node_modules/@ethersproject/properties/src.ts/_version.ts","../node_modules/@ethersproject/properties/src.ts/index.ts","../node_modules/@ethersproject/abi/src.ts/_version.ts","../node_modules/@ethersproject/abi/src.ts/fragments.ts","../node_modules/@ethersproject/abi/src.ts/coders/abstract-coder.ts","../node_modules/js-sha3/src/sha3.js","../node_modules/@ethersproject/keccak256/src.ts/index.ts","../node_modules/@ethersproject/address/src.ts/_version.ts","../node_modules/@ethersproject/address/src.ts/index.ts","../node_modules/@ethersproject/abi/src.ts/coders/address.ts","../node_modules/@ethersproject/abi/src.ts/coders/anonymous.ts","../node_modules/@ethersproject/abi/src.ts/coders/array.ts","../node_modules/@ethersproject/abi/src.ts/coders/boolean.ts","../node_modules/@ethersproject/abi/src.ts/coders/bytes.ts","../node_modules/@ethersproject/abi/src.ts/coders/fixed-bytes.ts","../node_modules/@ethersproject/abi/src.ts/coders/null.ts","../node_modules/@ethersproject/constants/src.ts/bignumbers.ts","../node_modules/@ethersproject/constants/src.ts/hashes.ts","../node_modules/@ethersproject/constants/src.ts/index.ts","../node_modules/@ethersproject/abi/src.ts/coders/number.ts","../node_modules/@ethersproject/strings/src.ts/_version.ts","../node_modules/@ethersproject/strings/src.ts/utf8.ts","../node_modules/@ethersproject/strings/src.ts/bytes32.ts","../node_modules/@ethersproject/strings/src.ts/idna.ts","../node_modules/@ethersproject/strings/src.ts/index.ts","../node_modules/@ethersproject/abi/src.ts/coders/string.ts","../node_modules/@ethersproject/abi/src.ts/coders/tuple.ts","../node_modules/@ethersproject/abi/src.ts/abi-coder.ts","../node_modules/@ethersproject/hash/src.ts/id.ts","../node_modules/@ethersproject/hash/src.ts/index.ts","../node_modules/@ethersproject/abi/src.ts/interface.ts","../node_modules/@ethersproject/abi/src.ts/index.ts","../node_modules/abi-coder/src/index.ts","../node_modules/form-data/lib/browser.js","../node_modules/@unique-nft/src/ExtensionTools/index.ts","../node_modules/@unique-nft/src/ExtensionTools/utils.ts","../node_modules/@unique-nft/src/ExtensionTools/ethereum.ts","../node_modules/@unique-nft/src/ExtensionTools/polkadot.ts","../node_modules/base-x/src/index.js","../node_modules/@noble/hashes/src/_assert.ts","../node_modules/@noble/hashes/src/_u64.ts","../node_modules/@noble/hashes/src/cryptoBrowser.ts","../node_modules/@noble/hashes/src/utils.ts","../node_modules/@noble/hashes/src/sha3.ts","../node_modules/@noble/hashes/src/_blake2.ts","../node_modules/@noble/hashes/src/blake2b.ts","../node_modules/index.ts","../node_modules/@unique-nft/src/index.ts","../node_modules/@unique-nft/src/Address/index.ts","../node_modules/@unique-nft/src/Address/constants.ts","../node_modules/@unique-nft/src/Address/imports.ts","../node_modules/@unique-nft/src/StringUtils/index.ts","../node_modules/@unique-nft/src/Address/ethereum.ts","../node_modules/@unique-nft/src/Address/substrate.ts","../node_modules/@unique-nft/src/Address/crossAccountId.ts","../src/main.ts","../node_modules/@unique-nft/sdk/index.js","../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","../node_modules/engine.io-parser/build/esm/index.js","../node_modules/@socket.io/component-emitter/index.mjs","../node_modules/engine.io-client/build/esm/globalThis.browser.js","../node_modules/engine.io-client/build/esm/util.js","../node_modules/engine.io-client/build/esm/transport.js","../node_modules/engine.io-client/build/esm/contrib/yeast.js","../node_modules/engine.io-client/build/esm/contrib/parseqs.js","../node_modules/engine.io-client/build/esm/contrib/has-cors.js","../node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js","../node_modules/engine.io-client/build/esm/transports/polling.js","../node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js","../node_modules/engine.io-client/build/esm/transports/websocket.js","../node_modules/engine.io-client/build/esm/transports/index.js","../node_modules/engine.io-client/build/esm/contrib/parseuri.js","../node_modules/engine.io-client/build/esm/socket.js","../node_modules/engine.io-client/build/esm/index.js","../node_modules/socket.io-client/build/esm/url.js","../node_modules/socket.io-parser/build/esm/index.js","../node_modules/socket.io-parser/build/esm/is-binary.js","../node_modules/socket.io-parser/build/esm/binary.js","../node_modules/socket.io-client/build/esm/on.js","../node_modules/socket.io-client/build/esm/socket.js","../node_modules/socket.io-client/build/esm/contrib/backo2.js","../node_modules/socket.io-client/build/esm/manager.js","../node_modules/socket.io-client/build/esm/index.js","../src/uitls.ts"],"sourcesContent":["'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","module.exports = require('./lib/axios');","(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","export const version = \"logger/5.7.0\";\n","\"use strict\";\n\nlet _permanentCensorErrors = false;\nlet _censorErrors = false;\n\nconst LogLevels: { [ name: string ]: number } = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\n\nimport { version } from \"./_version\";\n\nlet _globalLogger: Logger = null;\n\nfunction _checkNormalize(): string {\n try {\n const missing: Array = [ ];\n\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach((form) => {\n try {\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad normalize\");\n };\n } catch(error) {\n missing.push(form);\n }\n });\n\n if (missing.length) {\n throw new Error(\"missing \" + missing.join(\", \"));\n }\n\n if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error(\"broken implementation\")\n }\n } catch (error) {\n return error.message;\n }\n\n return null;\n}\n\nconst _normalizeError = _checkNormalize();\n\nexport enum LogLevel {\n DEBUG = \"DEBUG\",\n INFO = \"INFO\",\n WARNING = \"WARNING\",\n ERROR = \"ERROR\",\n OFF = \"OFF\"\n}\n\n\nexport enum ErrorCode {\n\n ///////////////////\n // Generic Errors\n\n // Unknown Error\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n\n // Not Implemented\n NOT_IMPLEMENTED = \"NOT_IMPLEMENTED\",\n\n // Unsupported Operation\n // - operation\n UNSUPPORTED_OPERATION = \"UNSUPPORTED_OPERATION\",\n\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n // - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n NETWORK_ERROR = \"NETWORK_ERROR\",\n\n // Some sort of bad response from the server\n SERVER_ERROR = \"SERVER_ERROR\",\n\n // Timeout\n TIMEOUT = \"TIMEOUT\",\n\n ///////////////////\n // Operational Errors\n\n // Buffer Overrun\n BUFFER_OVERRUN = \"BUFFER_OVERRUN\",\n\n // Numeric Fault\n // - operation: the operation being executed\n // - fault: the reason this faulted\n NUMERIC_FAULT = \"NUMERIC_FAULT\",\n\n\n ///////////////////\n // Argument Errors\n\n // Missing new operator to an object\n // - name: The name of the class\n MISSING_NEW = \"MISSING_NEW\",\n\n // Invalid argument (e.g. value is incompatible with type) to a function:\n // - argument: The argument name that was invalid\n // - value: The value of the argument\n INVALID_ARGUMENT = \"INVALID_ARGUMENT\",\n\n // Missing argument to a function:\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n MISSING_ARGUMENT = \"MISSING_ARGUMENT\",\n\n // Too many arguments\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n UNEXPECTED_ARGUMENT = \"UNEXPECTED_ARGUMENT\",\n\n\n ///////////////////\n // Blockchain Errors\n\n // Call exception\n // - transaction: the transaction\n // - address?: the contract address\n // - args?: The arguments passed into the function\n // - method?: The Solidity method signature\n // - errorSignature?: The EIP848 error signature\n // - errorArgs?: The EIP848 error parameters\n // - reason: The reason (only for EIP848 \"Error(string)\")\n CALL_EXCEPTION = \"CALL_EXCEPTION\",\n\n // Insufficient funds (< value + gasLimit * gasPrice)\n // - transaction: the transaction attempted\n INSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\n // Nonce has already been used\n // - transaction: the transaction attempted\n NONCE_EXPIRED = \"NONCE_EXPIRED\",\n\n // The replacement fee for the transaction is too low\n // - transaction: the transaction attempted\n REPLACEMENT_UNDERPRICED = \"REPLACEMENT_UNDERPRICED\",\n\n // The gas limit could not be estimated\n // - transaction: the transaction passed to estimateGas\n UNPREDICTABLE_GAS_LIMIT = \"UNPREDICTABLE_GAS_LIMIT\",\n\n // The transaction was replaced by one with a higher gas price\n // - reason: \"cancelled\", \"replaced\" or \"repriced\"\n // - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n // - hash: original transaction hash\n // - replacement: the full TransactionsResponse for the replacement\n // - receipt: the receipt of the replacement\n TRANSACTION_REPLACED = \"TRANSACTION_REPLACED\",\n\n\n ///////////////////\n // Interaction Errors\n\n // The user rejected the action, such as signing a message or sending\n // a transaction\n ACTION_REJECTED = \"ACTION_REJECTED\",\n};\n\nconst HEX = \"0123456789abcdef\";\n\nexport class Logger {\n readonly version: string;\n\n static errors = ErrorCode;\n\n static levels = LogLevel;\n\n constructor(version: string) {\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n value: version,\n writable: false\n });\n }\n\n _log(logLevel: LogLevel, args: Array): void {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) { return; }\n console.log.apply(console, args);\n }\n\n debug(...args: Array): void {\n this._log(Logger.levels.DEBUG, args);\n }\n\n info(...args: Array): void {\n this._log(Logger.levels.INFO, args);\n }\n\n warn(...args: Array): void {\n this._log(Logger.levels.WARNING, args);\n }\n\n makeError(message: string, code?: ErrorCode, params?: any): Error {\n // Errors are being censored\n if (_censorErrors) {\n return this.makeError(\"censored error\", code, { });\n }\n\n if (!code) { code = Logger.errors.UNKNOWN_ERROR; }\n if (!params) { params = {}; }\n\n const messageDetails: Array = [];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n try {\n if (value instanceof Uint8Array) {\n let hex = \"\";\n for (let i = 0; i < value.length; i++) {\n hex += HEX[value[i] >> 4];\n hex += HEX[value[i] & 0x0f];\n }\n messageDetails.push(key + \"=Uint8Array(0x\" + hex + \")\");\n } else {\n messageDetails.push(key + \"=\" + JSON.stringify(value));\n }\n } catch (error) {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(`code=${ code }`);\n messageDetails.push(`version=${ this.version }`);\n\n const reason = message;\n\n let url = \"\";\n\n switch (code) {\n case ErrorCode.NUMERIC_FAULT: {\n url = \"NUMERIC_FAULT\";\n const fault = message;\n\n switch (fault) {\n case \"overflow\": case \"underflow\": case \"division-by-zero\":\n url += \"-\" + fault;\n break;\n case \"negative-power\": case \"negative-width\":\n url += \"-unsupported\";\n break;\n case \"unbound-bitwise-result\":\n url += \"-unbound-result\";\n break;\n }\n break;\n }\n case ErrorCode.CALL_EXCEPTION:\n case ErrorCode.INSUFFICIENT_FUNDS:\n case ErrorCode.MISSING_NEW:\n case ErrorCode.NONCE_EXPIRED:\n case ErrorCode.REPLACEMENT_UNDERPRICED:\n case ErrorCode.TRANSACTION_REPLACED:\n case ErrorCode.UNPREDICTABLE_GAS_LIMIT:\n url = code;\n break;\n }\n\n if (url) {\n message += \" [ See: https:/\\/links.ethers.org/v5-errors-\" + url + \" ]\";\n }\n\n if (messageDetails.length) {\n message += \" (\" + messageDetails.join(\", \") + \")\";\n }\n\n // @TODO: Any??\n const error: any = new Error(message);\n error.reason = reason;\n error.code = code\n\n Object.keys(params).forEach(function(key) {\n error[key] = params[key];\n });\n\n return error;\n }\n\n throwError(message: string, code?: ErrorCode, params?: any): never {\n throw this.makeError(message, code, params);\n }\n\n throwArgumentError(message: string, name: string, value: any): never {\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n argument: name,\n value: value\n });\n }\n\n assert(condition: any, message: string, code?: ErrorCode, params?: any): void {\n if (!!condition) { return; }\n this.throwError(message, code, params);\n }\n\n assertArgument(condition: any, message: string, name: string, value: any): void {\n if (!!condition) { return; }\n this.throwArgumentError(message, name, value);\n }\n\n checkNormalize(message?: string): void {\n if (message == null) { message = \"platform missing String.prototype.normalize\"; }\n if (_normalizeError) {\n this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"String.prototype.normalize\", form: _normalizeError\n });\n }\n }\n\n checkSafeUint53(value: number, message?: string): void {\n if (typeof(value) !== \"number\") { return; }\n\n if (message == null) { message = \"value not safe\"; }\n\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"out-of-safe-range\",\n value: value\n });\n }\n\n if (value % 1) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"non-integer\",\n value: value\n });\n }\n }\n\n checkArgumentCount(count: number, expectedCount: number, message?: string): void {\n if (message) {\n message = \": \" + message;\n } else {\n message = \"\";\n }\n\n if (count < expectedCount) {\n this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n\n if (count > expectedCount) {\n this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n }\n\n checkNew(target: any, kind: any): void {\n if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n\n checkAbstract(target: any, kind: any): void {\n if (target === kind) {\n this.throwError(\n \"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\",\n Logger.errors.UNSUPPORTED_OPERATION,\n { name: target.name, operation: \"new\" }\n );\n } else if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n\n static globalLogger(): Logger {\n if (!_globalLogger) { _globalLogger = new Logger(version); }\n return _globalLogger;\n }\n\n static setCensorship(censorship: boolean, permanent?: boolean): void {\n if (!censorship && permanent) {\n this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n\n if (_permanentCensorErrors) {\n if (!censorship) { return; }\n this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n }\n\n static setLogLevel(logLevel: LogLevel): void {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n\n static from(version: string): Logger {\n return new Logger(version);\n }\n}\n","export const version = \"bytes/5.7.0\";\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n///////////////////////////////\n// Exported Types\n\nexport type Bytes = ArrayLike;\n\nexport type BytesLike = Bytes | string;\n\nexport type DataOptions = {\n allowMissingPrefix?: boolean;\n hexPad?: \"left\" | \"right\" | null;\n};\n\nexport interface Hexable {\n toHexString(): string;\n}\n\n\n/*\nexport interface HexString {\n length: number;\n substring: (start: number, end?: number) => string;\n\n [index: number]: string;\n}\n*/\n\nexport type SignatureLike = {\n r: string;\n s?: string;\n _vs?: string,\n recoveryParam?: number;\n v?: number;\n} | BytesLike;\n\nexport interface Signature {\n r: string;\n\n s: string;\n _vs: string,\n\n recoveryParam: number;\n v: number;\n\n yParityAndS: string\n compact: string;\n}\n\n///////////////////////////////\n\n\nfunction isHexable(value: any): value is Hexable {\n return !!(value.toHexString);\n}\n\nfunction addSlice(array: Uint8Array): Uint8Array {\n if (array.slice) { return array; }\n\n array.slice = function() {\n const args = Array.prototype.slice.call(arguments);\n return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\n }\n\n return array;\n}\n\nexport function isBytesLike(value: any): value is BytesLike {\n return ((isHexString(value) && !(value.length % 2)) || isBytes(value));\n}\n\nfunction isInteger(value: number) {\n return (typeof(value) === \"number\" && value == value && (value % 1) === 0);\n}\n\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value.constructor === Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n if (!isInteger(value.length) || value.length < 0) { return false; }\n\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n if (!isInteger(v) || v < 0 || v >= 256) { return false; }\n }\n return true;\n}\n\n\nexport function arrayify(value: BytesLike | Hexable | number, options?: DataOptions): Uint8Array {\n if (!options) { options = { }; }\n\n if (typeof(value) === \"number\") {\n logger.checkSafeUint53(value, \"invalid arrayify value\");\n\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value = parseInt(String(value / 256));\n }\n if (result.length === 0) { result.push(0); }\n\n return addSlice(new Uint8Array(result));\n }\n\n if (options.allowMissingPrefix && typeof(value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n\n if (isHexable(value)) { value = value.toHexString(); }\n\n if (isHexString(value)) {\n let hex = (value).substring(2);\n if (hex.length % 2) {\n if (options.hexPad === \"left\") {\n hex = \"0\" + hex;\n } else if (options.hexPad === \"right\") {\n hex += \"0\";\n } else {\n logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n }\n }\n\n const result = [];\n for (let i = 0; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n\n return addSlice(new Uint8Array(result));\n }\n\n if (isBytes(value)) {\n return addSlice(new Uint8Array(value));\n }\n\n return logger.throwArgumentError(\"invalid arrayify value\", \"value\", value);\n}\n\nexport function concat(items: ReadonlyArray): Uint8Array {\n const objects = items.map(item => arrayify(item));\n const length = objects.reduce((accum, item) => (accum + item.length), 0);\n\n const result = new Uint8Array(length);\n\n objects.reduce((offset, object) => {\n result.set(object, offset);\n return offset + object.length;\n }, 0);\n\n return addSlice(result);\n}\n\nexport function stripZeros(value: BytesLike): Uint8Array {\n let result: Uint8Array = arrayify(value);\n\n if (result.length === 0) { return result; }\n\n // Find the first non-zero entry\n let start = 0;\n while (start < result.length && result[start] === 0) { start++ }\n\n // If we started with zeros, strip them\n if (start) {\n result = result.slice(start);\n }\n\n return result;\n}\n\nexport function zeroPad(value: BytesLike, length: number): Uint8Array {\n value = arrayify(value);\n\n if (value.length > length) {\n logger.throwArgumentError(\"value out of range\", \"value\", arguments[0]);\n }\n\n const result = new Uint8Array(length);\n result.set(value, length - value.length);\n return addSlice(result);\n}\n\n\nexport function isHexString(value: any, length?: number): boolean {\n if (typeof(value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false\n }\n if (length && value.length !== 2 + 2 * length) { return false; }\n return true;\n}\n\nconst HexCharacters: string = \"0123456789abcdef\";\n\nexport function hexlify(value: BytesLike | Hexable | number | bigint, options?: DataOptions): string {\n if (!options) { options = { }; }\n\n if (typeof(value) === \"number\") {\n logger.checkSafeUint53(value, \"invalid hexlify value\");\n\n let hex = \"\";\n while (value) {\n hex = HexCharacters[value & 0xf] + hex;\n value = Math.floor(value / 16);\n }\n\n if (hex.length) {\n if (hex.length % 2) { hex = \"0\" + hex; }\n return \"0x\" + hex;\n }\n\n return \"0x00\";\n }\n\n if (typeof(value) === \"bigint\") {\n value = value.toString(16);\n if (value.length % 2) { return (\"0x0\" + value); }\n return \"0x\" + value;\n }\n\n if (options.allowMissingPrefix && typeof(value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n\n if (isHexable(value)) { return value.toHexString(); }\n\n if (isHexString(value)) {\n if ((value).length % 2) {\n if (options.hexPad === \"left\") {\n value = \"0x0\" + (value).substring(2);\n } else if (options.hexPad === \"right\") {\n value += \"0\";\n } else {\n logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n }\n }\n return (value).toLowerCase();\n }\n\n if (isBytes(value)) {\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n let v = value[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n }\n\n return logger.throwArgumentError(\"invalid hexlify value\", \"value\", value);\n}\n\n/*\nfunction unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {\n if (typeof(value) === \"string\" && value.length % 2 && value.substring(0, 2) === \"0x\") {\n return \"0x0\" + value.substring(2);\n }\n return value;\n}\n*/\nexport function hexDataLength(data: BytesLike) {\n if (typeof(data) !== \"string\") {\n data = hexlify(data);\n } else if (!isHexString(data) || (data.length % 2)) {\n return null;\n }\n\n return (data.length - 2) / 2;\n}\n\nexport function hexDataSlice(data: BytesLike, offset: number, endOffset?: number): string {\n if (typeof(data) !== \"string\") {\n data = hexlify(data);\n } else if (!isHexString(data) || (data.length % 2)) {\n logger.throwArgumentError(\"invalid hexData\", \"value\", data );\n }\n\n offset = 2 + 2 * offset;\n\n if (endOffset != null) {\n return \"0x\" + data.substring(offset, 2 + 2 * endOffset);\n }\n\n return \"0x\" + data.substring(offset);\n}\n\nexport function hexConcat(items: ReadonlyArray): string {\n let result = \"0x\";\n items.forEach((item) => {\n result += hexlify(item).substring(2);\n });\n return result;\n}\n\nexport function hexValue(value: BytesLike | Hexable | number | bigint): string {\n const trimmed = hexStripZeros(hexlify(value, { hexPad: \"left\" }));\n if (trimmed === \"0x\") { return \"0x0\"; }\n return trimmed;\n}\n\nexport function hexStripZeros(value: BytesLike): string {\n if (typeof(value) !== \"string\") { value = hexlify(value); }\n\n if (!isHexString(value)) {\n logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n }\n value = value.substring(2);\n let offset = 0;\n while (offset < value.length && value[offset] === \"0\") { offset++; }\n return \"0x\" + value.substring(offset);\n}\n\nexport function hexZeroPad(value: BytesLike, length: number): string {\n if (typeof(value) !== \"string\") {\n value = hexlify(value);\n } else if (!isHexString(value)) {\n logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n }\n\n if (value.length > 2 * length + 2) {\n logger.throwArgumentError(\"value out of range\", \"value\", arguments[1]);\n }\n\n while (value.length < 2 * length + 2) {\n value = \"0x0\" + value.substring(2);\n }\n\n return value;\n}\n\nexport function splitSignature(signature: SignatureLike): Signature {\n\n const result = {\n r: \"0x\",\n s: \"0x\",\n _vs: \"0x\",\n recoveryParam: 0,\n v: 0,\n yParityAndS: \"0x\",\n compact: \"0x\"\n };\n\n if (isBytesLike(signature)) {\n let bytes: Uint8Array = arrayify(signature);\n\n // Get the r, s and v\n if (bytes.length === 64) {\n // EIP-2098; pull the v from the top bit of s and clear it\n result.v = 27 + (bytes[32] >> 7);\n bytes[32] &= 0x7f;\n\n result.r = hexlify(bytes.slice(0, 32));\n result.s = hexlify(bytes.slice(32, 64));\n\n } else if (bytes.length === 65) {\n result.r = hexlify(bytes.slice(0, 32));\n result.s = hexlify(bytes.slice(32, 64));\n result.v = bytes[64];\n } else {\n\n logger.throwArgumentError(\"invalid signature string\", \"signature\", signature);\n }\n\n\n // Allow a recid to be used as the v\n if (result.v < 27) {\n if (result.v === 0 || result.v === 1) {\n result.v += 27;\n } else {\n logger.throwArgumentError(\"signature invalid v byte\", \"signature\", signature);\n }\n }\n\n // Compute recoveryParam from v\n result.recoveryParam = 1 - (result.v % 2);\n\n // Compute _vs from recoveryParam and s\n if (result.recoveryParam) { bytes[32] |= 0x80; }\n result._vs = hexlify(bytes.slice(32, 64))\n\n } else {\n result.r = signature.r;\n result.s = signature.s;\n result.v = signature.v;\n result.recoveryParam = signature.recoveryParam;\n result._vs = signature._vs;\n\n // If the _vs is available, use it to populate missing s, v and recoveryParam\n // and verify non-missing s, v and recoveryParam\n if (result._vs != null) {\n const vs = zeroPad(arrayify(result._vs), 32);\n result._vs = hexlify(vs);\n\n // Set or check the recid\n const recoveryParam = ((vs[0] >= 128) ? 1: 0);\n if (result.recoveryParam == null) {\n result.recoveryParam = recoveryParam;\n } else if (result.recoveryParam !== recoveryParam) {\n logger.throwArgumentError(\"signature recoveryParam mismatch _vs\", \"signature\", signature);\n }\n\n // Set or check the s\n vs[0] &= 0x7f;\n const s = hexlify(vs);\n if (result.s == null) {\n result.s = s;\n } else if (result.s !== s) {\n logger.throwArgumentError(\"signature v mismatch _vs\", \"signature\", signature);\n }\n }\n\n // Use recid and v to populate each other\n if (result.recoveryParam == null) {\n if (result.v == null) {\n logger.throwArgumentError(\"signature missing v and recoveryParam\", \"signature\", signature);\n } else if (result.v === 0 || result.v === 1) {\n result.recoveryParam = result.v;\n } else {\n result.recoveryParam = 1 - (result.v % 2);\n }\n } else {\n if (result.v == null) {\n result.v = 27 + result.recoveryParam;\n } else {\n const recId = (result.v === 0 || result.v === 1) ? result.v :(1 - (result.v % 2));\n if (result.recoveryParam !== recId) {\n logger.throwArgumentError(\"signature recoveryParam mismatch v\", \"signature\", signature);\n }\n }\n }\n\n if (result.r == null || !isHexString(result.r)) {\n logger.throwArgumentError(\"signature missing or invalid r\", \"signature\", signature);\n } else {\n result.r = hexZeroPad(result.r, 32);\n }\n\n if (result.s == null || !isHexString(result.s)) {\n logger.throwArgumentError(\"signature missing or invalid s\", \"signature\", signature);\n } else {\n result.s = hexZeroPad(result.s, 32);\n }\n\n const vs = arrayify(result.s);\n if (vs[0] >= 128) {\n logger.throwArgumentError(\"signature s out of range\", \"signature\", signature);\n }\n if (result.recoveryParam) { vs[0] |= 0x80; }\n const _vs = hexlify(vs);\n\n if (result._vs) {\n if (!isHexString(result._vs)) {\n logger.throwArgumentError(\"signature invalid _vs\", \"signature\", signature);\n }\n result._vs = hexZeroPad(result._vs, 32);\n }\n\n // Set or check the _vs\n if (result._vs == null) {\n result._vs = _vs;\n } else if (result._vs !== _vs) {\n logger.throwArgumentError(\"signature _vs mismatch v and s\", \"signature\", signature);\n }\n }\n\n result.yParityAndS = result._vs;\n result.compact = result.r + result.yParityAndS.substring(2);\n\n return result;\n}\n\nexport function joinSignature(signature: SignatureLike): string {\n signature = splitSignature(signature);\n\n return hexlify(concat([\n signature.r,\n signature.s,\n (signature.recoveryParam ? \"0x1c\": \"0x1b\")\n ]));\n}\n\n","export const version = \"bignumber/5.7.0\";\n","\"use strict\";\n\n/**\n * BigNumber\n *\n * A wrapper around the BN.js object. We use the BN.js library\n * because it is used by elliptic, so it is required regardless.\n *\n */\n\nimport _BN from \"bn.js\";\nimport BN = _BN.BN;\n\nimport { Bytes, Hexable, hexlify, isBytes, isHexString } from \"@ethersproject/bytes\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nconst _constructorGuard = { };\n\nconst MAX_SAFE = 0x1fffffffffffff;\n\n\nexport type BigNumberish = BigNumber | Bytes | bigint | string | number;\n\nexport function isBigNumberish(value: any): value is BigNumberish {\n return (value != null) && (\n BigNumber.isBigNumber(value) ||\n (typeof(value) === \"number\" && (value % 1) === 0) ||\n (typeof(value) === \"string\" && !!value.match(/^-?[0-9]+$/)) ||\n isHexString(value) ||\n (typeof(value) === \"bigint\") ||\n isBytes(value)\n );\n}\n\n// Only warn about passing 10 into radix once\nlet _warnedToStringRadix = false;\n\nexport class BigNumber implements Hexable {\n readonly _hex: string;\n readonly _isBigNumber: boolean;\n\n constructor(constructorGuard: any, hex: string) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"cannot call constructor directly; use BigNumber.from\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new (BigNumber)\"\n });\n }\n\n this._hex = hex;\n this._isBigNumber = true;\n\n Object.freeze(this);\n }\n\n fromTwos(value: number): BigNumber {\n return toBigNumber(toBN(this).fromTwos(value));\n }\n\n toTwos(value: number): BigNumber {\n return toBigNumber(toBN(this).toTwos(value));\n }\n\n abs(): BigNumber {\n if (this._hex[0] === \"-\") {\n return BigNumber.from(this._hex.substring(1));\n }\n return this;\n }\n\n add(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).add(toBN(other)));\n }\n\n sub(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).sub(toBN(other)));\n }\n\n div(other: BigNumberish): BigNumber {\n const o = BigNumber.from(other);\n if (o.isZero()) {\n throwFault(\"division-by-zero\", \"div\");\n }\n return toBigNumber(toBN(this).div(toBN(other)));\n }\n\n mul(other: BigNumberish): BigNumber {\n return toBigNumber(toBN(this).mul(toBN(other)));\n }\n\n mod(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"division-by-zero\", \"mod\");\n }\n return toBigNumber(toBN(this).umod(value));\n }\n\n pow(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (value.isNeg()) {\n throwFault(\"negative-power\", \"pow\");\n }\n return toBigNumber(toBN(this).pow(value));\n }\n\n and(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"and\");\n }\n return toBigNumber(toBN(this).and(value));\n }\n\n or(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"or\");\n }\n return toBigNumber(toBN(this).or(value));\n }\n\n xor(other: BigNumberish): BigNumber {\n const value = toBN(other);\n if (this.isNegative() || value.isNeg()) {\n throwFault(\"unbound-bitwise-result\", \"xor\");\n }\n return toBigNumber(toBN(this).xor(value));\n }\n\n mask(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"mask\");\n }\n return toBigNumber(toBN(this).maskn(value));\n }\n\n shl(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"shl\");\n }\n return toBigNumber(toBN(this).shln(value));\n }\n\n shr(value: number): BigNumber {\n if (this.isNegative() || value < 0) {\n throwFault(\"negative-width\", \"shr\");\n }\n return toBigNumber(toBN(this).shrn(value));\n }\n\n eq(other: BigNumberish): boolean {\n return toBN(this).eq(toBN(other));\n }\n\n lt(other: BigNumberish): boolean {\n return toBN(this).lt(toBN(other));\n }\n\n lte(other: BigNumberish): boolean {\n return toBN(this).lte(toBN(other));\n }\n\n gt(other: BigNumberish): boolean {\n return toBN(this).gt(toBN(other));\n }\n\n gte(other: BigNumberish): boolean {\n return toBN(this).gte(toBN(other));\n }\n\n isNegative(): boolean {\n return (this._hex[0] === \"-\");\n }\n\n isZero(): boolean {\n return toBN(this).isZero();\n }\n\n toNumber(): number {\n try {\n return toBN(this).toNumber();\n } catch (error) {\n throwFault(\"overflow\", \"toNumber\", this.toString());\n }\n return null;\n }\n\n toBigInt(): bigint {\n try {\n return BigInt(this.toString());\n } catch (e) { }\n\n return logger.throwError(\"this platform does not support BigInt\", Logger.errors.UNSUPPORTED_OPERATION, {\n value: this.toString()\n });\n }\n\n toString(): string {\n // Lots of people expect this, which we do not support, so check (See: #889)\n if (arguments.length > 0) {\n if (arguments[0] === 10) {\n if (!_warnedToStringRadix) {\n _warnedToStringRadix = true;\n logger.warn(\"BigNumber.toString does not accept any parameters; base-10 is assumed\");\n }\n } else if (arguments[0] === 16) {\n logger.throwError(\"BigNumber.toString does not accept any parameters; use bigNumber.toHexString()\", Logger.errors.UNEXPECTED_ARGUMENT, { });\n } else {\n logger.throwError(\"BigNumber.toString does not accept parameters\", Logger.errors.UNEXPECTED_ARGUMENT, { });\n }\n }\n return toBN(this).toString(10);\n }\n\n toHexString(): string {\n return this._hex;\n }\n\n toJSON(key?: string): any {\n return { type: \"BigNumber\", hex: this.toHexString() };\n }\n\n static from(value: any): BigNumber {\n if (value instanceof BigNumber) { return value; }\n\n if (typeof(value) === \"string\") {\n if (value.match(/^-?0x[0-9a-f]+$/i)) {\n return new BigNumber(_constructorGuard, toHex(value));\n }\n\n if (value.match(/^-?[0-9]+$/)) {\n return new BigNumber(_constructorGuard, toHex(new BN(value)));\n }\n\n return logger.throwArgumentError(\"invalid BigNumber string\", \"value\", value);\n }\n\n if (typeof(value) === \"number\") {\n if (value % 1) {\n throwFault(\"underflow\", \"BigNumber.from\", value);\n }\n\n if (value >= MAX_SAFE || value <= -MAX_SAFE) {\n throwFault(\"overflow\", \"BigNumber.from\", value);\n }\n\n return BigNumber.from(String(value));\n }\n\n const anyValue = value;\n\n if (typeof(anyValue) === \"bigint\") {\n return BigNumber.from(anyValue.toString());\n }\n\n if (isBytes(anyValue)) {\n return BigNumber.from(hexlify(anyValue));\n }\n\n if (anyValue) {\n\n // Hexable interface (takes priority)\n if (anyValue.toHexString) {\n const hex = anyValue.toHexString();\n if (typeof(hex) === \"string\") {\n return BigNumber.from(hex);\n }\n\n } else {\n // For now, handle legacy JSON-ified values (goes away in v6)\n let hex = anyValue._hex;\n\n // New-form JSON\n if (hex == null && anyValue.type === \"BigNumber\") {\n hex = anyValue.hex;\n }\n\n if (typeof(hex) === \"string\") {\n if (isHexString(hex) || (hex[0] === \"-\" && isHexString(hex.substring(1)))) {\n return BigNumber.from(hex);\n }\n }\n }\n }\n\n return logger.throwArgumentError(\"invalid BigNumber value\", \"value\", value);\n }\n\n static isBigNumber(value: any): value is BigNumber {\n return !!(value && value._isBigNumber);\n }\n}\n\n// Normalize the hex string\nfunction toHex(value: string | BN): string {\n\n // For BN, call on the hex string\n if (typeof(value) !== \"string\") {\n return toHex(value.toString(16));\n }\n\n // If negative, prepend the negative sign to the normalized positive value\n if (value[0] === \"-\") {\n // Strip off the negative sign\n value = value.substring(1);\n\n // Cannot have multiple negative signs (e.g. \"--0x04\")\n if (value[0] === \"-\") { logger.throwArgumentError(\"invalid hex\", \"value\", value); }\n\n // Call toHex on the positive component\n value = toHex(value);\n\n // Do not allow \"-0x00\"\n if (value === \"0x00\") { return value; }\n\n // Negate the value\n return \"-\" + value;\n }\n\n // Add a \"0x\" prefix if missing\n if (value.substring(0, 2) !== \"0x\") { value = \"0x\" + value; }\n\n // Normalize zero\n if (value === \"0x\") { return \"0x00\"; }\n\n // Make the string even length\n if (value.length % 2) { value = \"0x0\" + value.substring(2); }\n\n // Trim to smallest even-length string\n while (value.length > 4 && value.substring(0, 4) === \"0x00\") {\n value = \"0x\" + value.substring(4);\n }\n\n return value;\n}\n\nfunction toBigNumber(value: BN): BigNumber {\n return BigNumber.from(toHex(value));\n}\n\nfunction toBN(value: BigNumberish): BN {\n const hex = BigNumber.from(value).toHexString();\n if (hex[0] === \"-\") {\n return (new BN(\"-\" + hex.substring(3), 16));\n }\n return new BN(hex.substring(2), 16);\n}\n\nfunction throwFault(fault: string, operation: string, value?: any): never {\n const params: any = { fault: fault, operation: operation };\n if (value != null) { params.value = value; }\n\n return logger.throwError(fault, Logger.errors.NUMERIC_FAULT, params);\n}\n\n// value should have no prefix\nexport function _base36To16(value: string): string {\n return (new BN(value, 36)).toString(16);\n}\n\n// value should have no prefix\nexport function _base16To36(value: string): string {\n return (new BN(value, 16)).toString(36);\n}\n","export { BigNumber, BigNumberish } from \"./bignumber\";\nexport { formatFixed, FixedFormat, FixedNumber, parseFixed } from \"./fixednumber\";\n\n// Internal methods used by address\nexport { _base16To36, _base36To16 } from \"./bignumber\";\n","export const version = \"properties/5.7.0\";\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport function defineReadOnly(object: T, name: K, value: T[K]): void {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n\n// Crawl up the constructor chain to find a static method\nexport function getStatic(ctor: any, key: string): T {\n for (let i = 0; i < 32; i++) {\n if (ctor[key]) { return ctor[key]; }\n if (!ctor.prototype || typeof(ctor.prototype) !== \"object\") { break; }\n ctor = Object.getPrototypeOf(ctor.prototype).constructor;\n }\n return null;\n}\n\nexport type Deferrable = {\n [ K in keyof T ]: T[K] | Promise;\n}\n\n\ntype Result = { key: string, value: any};\n\nexport async function resolveProperties(object: Readonly>): Promise {\n const promises: Array> = Object.keys(object).map((key) => {\n const value = object[>key];\n return Promise.resolve(value).then((v) => ({ key: key, value: v }));\n });\n\n const results = await Promise.all(promises);\n\n return results.reduce((accum, result) => {\n accum[(result.key)] = result.value;\n return accum;\n }, { });\n}\n\nexport function checkProperties(object: any, properties: { [ name: string ]: boolean }): void {\n if (!object || typeof(object) !== \"object\") {\n logger.throwArgumentError(\"invalid object\", \"object\", object);\n }\n\n Object.keys(object).forEach((key) => {\n if (!properties[key]) {\n logger.throwArgumentError(\"invalid object key - \" + key, \"transaction:\" + key, object);\n }\n });\n}\n\nexport function shallowCopy(object: T): T {\n const result: any = {};\n for (const key in object) { result[key] = object[key]; }\n return result;\n}\n\nconst opaque: { [key: string]: boolean } = { bigint: true, boolean: true, \"function\": true, number: true, string: true };\n\nfunction _isFrozen(object: any): boolean {\n\n // Opaque objects are not mutable, so safe to copy by assignment\n if (object === undefined || object === null || opaque[typeof(object)]) { return true; }\n\n if (Array.isArray(object) || typeof(object) === \"object\") {\n if (!Object.isFrozen(object)) { return false; }\n\n const keys = Object.keys(object);\n for (let i = 0; i < keys.length; i++) {\n let value: any = null;\n try {\n value = object[keys[i]];\n } catch (error) {\n // If accessing a value triggers an error, it is a getter\n // designed to do so (e.g. Result) and is therefore \"frozen\"\n continue;\n }\n\n if (!_isFrozen(value)) { return false; }\n }\n\n return true;\n }\n\n return logger.throwArgumentError(`Cannot deepCopy ${ typeof(object) }`, \"object\", object);\n}\n\n// Returns a new copy of object, such that no properties may be replaced.\n// New properties may be added only to objects.\nfunction _deepCopy(object: any): any {\n\n if (_isFrozen(object)) { return object; }\n\n // Arrays are mutable, so we need to create a copy\n if (Array.isArray(object)) {\n return Object.freeze(object.map((item) => deepCopy(item)));\n }\n\n if (typeof(object) === \"object\") {\n const result: { [ key: string ]: any } = {};\n for (const key in object) {\n const value = object[key];\n if (value === undefined) { continue; }\n defineReadOnly(result, key, deepCopy(value));\n }\n\n return result;\n }\n\n return logger.throwArgumentError(`Cannot deepCopy ${ typeof(object) }`, \"object\", object);\n}\n\nexport function deepCopy(object: T): T {\n return _deepCopy(object);\n}\n\nexport class Description {\n constructor(info: { [ K in keyof T ]: T[K] }) {\n for (const key in info) {\n (this)[key] = deepCopy(info[key]);\n }\n }\n}\n","export const version = \"abi/5.7.0\";\n","\"use strict\";\n\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport interface JsonFragmentType {\n readonly name?: string;\n readonly indexed?: boolean;\n readonly type?: string;\n readonly internalType?: any; // @TODO: in v6 reduce type\n readonly components?: ReadonlyArray;\n}\n\nexport interface JsonFragment {\n readonly name?: string;\n readonly type?: string;\n\n readonly anonymous?: boolean;\n\n readonly payable?: boolean;\n readonly constant?: boolean;\n readonly stateMutability?: string;\n\n readonly inputs?: ReadonlyArray;\n readonly outputs?: ReadonlyArray;\n\n readonly gas?: string;\n};\n\nconst _constructorGuard = { };\n\n// AST Node parser state\ntype ParseState = {\n allowArray?: boolean,\n allowName?: boolean,\n allowParams?: boolean,\n allowType?: boolean,\n readArray?: boolean,\n};\n\n// AST Node\ntype ParseNode = {\n parent?: any,\n type?: string,\n name?: string,\n state?: ParseState,\n indexed?: boolean,\n components?: Array\n};\n\nlet ModifiersBytes: { [ name: string ]: boolean } = { calldata: true, memory: true, storage: true };\nlet ModifiersNest: { [ name: string ]: boolean } = { calldata: true, memory: true };\nfunction checkModifier(type: string, name: string): boolean {\n if (type === \"bytes\" || type === \"string\") {\n if (ModifiersBytes[name]) { return true; }\n } else if (type === \"address\") {\n if (name === \"payable\") { return true; }\n } else if (type.indexOf(\"[\") >= 0 || type === \"tuple\") {\n if (ModifiersNest[name]) { return true; }\n }\n if (ModifiersBytes[name] || name === \"payable\") {\n logger.throwArgumentError(\"invalid modifier\", \"name\", name);\n }\n return false;\n}\n\n// @TODO: Make sure that children of an indexed tuple are marked with a null indexed\nfunction parseParamType(param: string, allowIndexed: boolean): ParseNode {\n\n let originalParam = param;\n function throwError(i: number) {\n logger.throwArgumentError(`unexpected character at position ${ i }`, \"param\", param);\n }\n param = param.replace(/\\s/g, \" \");\n\n function newNode(parent: ParseNode): ParseNode {\n let node: ParseNode = { type: \"\", name: \"\", parent: parent, state: { allowType: true } };\n if (allowIndexed) { node.indexed = false; }\n return node\n }\n\n let parent: ParseNode = { type: \"\", name: \"\", state: { allowType: true } };\n let node = parent;\n\n for (let i = 0; i < param.length; i++) {\n let c = param[i];\n switch (c) {\n case \"(\":\n if (node.state.allowType && node.type === \"\") {\n node.type = \"tuple\";\n } else if (!node.state.allowParams) {\n throwError(i);\n }\n node.state.allowType = false;\n node.type = verifyType(node.type);\n node.components = [ newNode(node) ];\n node = node.components[0];\n break;\n\n case \")\":\n delete node.state;\n\n if (node.name === \"indexed\") {\n if (!allowIndexed) { throwError(i); }\n node.indexed = true;\n node.name = \"\";\n }\n\n if (checkModifier(node.type, node.name)) { node.name = \"\"; }\n\n node.type = verifyType(node.type);\n\n let child = node;\n node = node.parent;\n if (!node) { throwError(i); }\n delete child.parent;\n node.state.allowParams = false;\n node.state.allowName = true;\n node.state.allowArray = true;\n break;\n\n case \",\":\n delete node.state;\n\n if (node.name === \"indexed\") {\n if (!allowIndexed) { throwError(i); }\n node.indexed = true;\n node.name = \"\";\n }\n\n if (checkModifier(node.type, node.name)) { node.name = \"\"; }\n\n node.type = verifyType(node.type);\n\n let sibling: ParseNode = newNode(node.parent);\n //{ type: \"\", name: \"\", parent: node.parent, state: { allowType: true } };\n node.parent.components.push(sibling);\n delete node.parent;\n node = sibling;\n break;\n\n // Hit a space...\n case \" \":\n\n // If reading type, the type is done and may read a param or name\n if (node.state.allowType) {\n if (node.type !== \"\") {\n node.type = verifyType(node.type);\n delete node.state.allowType;\n node.state.allowName = true;\n node.state.allowParams = true;\n }\n }\n\n // If reading name, the name is done\n if (node.state.allowName) {\n if (node.name !== \"\") {\n if (node.name === \"indexed\") {\n if (!allowIndexed) { throwError(i); }\n if (node.indexed) { throwError(i); }\n node.indexed = true;\n node.name = \"\";\n } else if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n } else {\n node.state.allowName = false;\n }\n }\n }\n\n break;\n\n case \"[\":\n if (!node.state.allowArray) { throwError(i); }\n\n node.type += c;\n\n node.state.allowArray = false;\n node.state.allowName = false;\n node.state.readArray = true;\n break;\n\n case \"]\":\n if (!node.state.readArray) { throwError(i); }\n\n node.type += c;\n\n node.state.readArray = false;\n node.state.allowArray = true;\n node.state.allowName = true;\n break;\n\n default:\n if (node.state.allowType) {\n node.type += c;\n node.state.allowParams = true;\n node.state.allowArray = true;\n } else if (node.state.allowName) {\n node.name += c;\n delete node.state.allowArray;\n } else if (node.state.readArray) {\n node.type += c;\n } else {\n throwError(i);\n }\n }\n }\n\n if (node.parent) { logger.throwArgumentError(\"unexpected eof\", \"param\", param); }\n\n delete parent.state;\n\n if (node.name === \"indexed\") {\n if (!allowIndexed) { throwError(originalParam.length - 7); }\n if (node.indexed) { throwError(originalParam.length - 7); }\n node.indexed = true;\n node.name = \"\";\n } else if (checkModifier(node.type, node.name)) {\n node.name = \"\";\n }\n\n parent.type = verifyType(parent.type);\n\n return parent;\n}\n\nfunction populate(object: any, params: any) {\n for (let key in params) { defineReadOnly(object, key, params[key]); }\n}\n\nexport const FormatTypes: { [ name: string ]: string } = Object.freeze({\n // Bare formatting, as is needed for computing a sighash of an event or function\n sighash: \"sighash\",\n\n // Human-Readable with Minimal spacing and without names (compact human-readable)\n minimal: \"minimal\",\n\n // Human-Readable with nice spacing, including all names\n full: \"full\",\n\n // JSON-format a la Solidity\n json: \"json\"\n});\n\nconst paramTypeArray = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\n\nexport class ParamType {\n\n // The local name of the parameter (of null if unbound)\n readonly name: string;\n\n // The fully qualified type (e.g. \"address\", \"tuple(address)\", \"uint256[3][]\"\n readonly type: string;\n\n // The base type (e.g. \"address\", \"tuple\", \"array\")\n readonly baseType: string;\n\n // Indexable Paramters ONLY (otherwise null)\n readonly indexed: boolean;\n\n // Tuples ONLY: (otherwise null)\n // - sub-components\n readonly components: Array;\n\n // Arrays ONLY: (otherwise null)\n // - length of the array (-1 for dynamic length)\n // - child type\n readonly arrayLength: number;\n readonly arrayChildren: ParamType;\n\n readonly _isParamType: boolean;\n\n constructor(constructorGuard: any, params: any) {\n if (constructorGuard !== _constructorGuard) { logger.throwError(\"use fromString\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new ParamType()\"\n }); }\n populate(this, params);\n\n let match = this.type.match(paramTypeArray);\n if (match) {\n populate(this, {\n arrayLength: parseInt(match[2] || \"-1\"),\n arrayChildren: ParamType.fromObject({\n type: match[1],\n components: this.components\n }),\n baseType: \"array\"\n });\n } else {\n populate(this, {\n arrayLength: null,\n arrayChildren: null,\n baseType: ((this.components != null) ? \"tuple\": this.type)\n });\n }\n\n this._isParamType = true;\n\n Object.freeze(this);\n }\n\n // Format the parameter fragment\n // - sighash: \"(uint256,address)\"\n // - minimal: \"tuple(uint256,address) indexed\"\n // - full: \"tuple(uint256 foo, address bar) indexed baz\"\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n let result: any = {\n type: ((this.baseType === \"tuple\") ? \"tuple\": this.type),\n name: (this.name || undefined)\n };\n if (typeof(this.indexed) === \"boolean\") { result.indexed = this.indexed; }\n if (this.components) {\n result.components = this.components.map((comp) => JSON.parse(comp.format(format)));\n }\n return JSON.stringify(result);\n }\n\n let result = \"\";\n\n // Array\n if (this.baseType === \"array\") {\n result += this.arrayChildren.format(format);\n result += \"[\" + (this.arrayLength < 0 ? \"\": String(this.arrayLength)) + \"]\";\n } else {\n if (this.baseType === \"tuple\") {\n if (format !== FormatTypes.sighash) {\n result += this.type;\n }\n result += \"(\" + this.components.map(\n (comp) => comp.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \")\";\n } else {\n result += this.type;\n }\n }\n\n if (format !== FormatTypes.sighash) {\n if (this.indexed === true) { result += \" indexed\"; }\n if (format === FormatTypes.full && this.name) {\n result += \" \" + this.name;\n }\n }\n\n return result;\n }\n\n static from(value: string | JsonFragmentType | ParamType, allowIndexed?: boolean): ParamType {\n if (typeof(value) === \"string\") {\n return ParamType.fromString(value, allowIndexed);\n }\n return ParamType.fromObject(value);\n }\n\n static fromObject(value: JsonFragmentType | ParamType): ParamType {\n if (ParamType.isParamType(value)) { return value; }\n\n return new ParamType(_constructorGuard, {\n name: (value.name || null),\n type: verifyType(value.type),\n indexed: ((value.indexed == null) ? null: !!value.indexed),\n components: (value.components ? value.components.map(ParamType.fromObject): null)\n });\n }\n\n static fromString(value: string, allowIndexed?: boolean): ParamType {\n function ParamTypify(node: ParseNode): ParamType {\n return ParamType.fromObject({\n name: node.name,\n type: node.type,\n indexed: node.indexed,\n components: node.components\n });\n }\n\n return ParamTypify(parseParamType(value, !!allowIndexed));\n }\n\n static isParamType(value: any): value is ParamType {\n return !!(value != null && value._isParamType);\n }\n};\n\nfunction parseParams(value: string, allowIndex: boolean): Array {\n return splitNesting(value).map((param) => ParamType.fromString(param, allowIndex));\n}\n\ntype TypeCheck = { -readonly [ K in keyof T ]: T[K] };\n\ninterface _Fragment {\n readonly type: string;\n readonly name: string;\n readonly inputs: ReadonlyArray;\n}\n\nexport abstract class Fragment {\n\n readonly type: string;\n readonly name: string;\n readonly inputs: Array;\n\n readonly _isFragment: boolean;\n\n constructor(constructorGuard: any, params: any) {\n if (constructorGuard !== _constructorGuard) {\n logger.throwError(\"use a static from method\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"new Fragment()\"\n });\n }\n populate(this, params);\n\n this._isFragment = true;\n\n Object.freeze(this);\n }\n\n abstract format(format?: string): string;\n\n static from(value: Fragment | JsonFragment | string): Fragment {\n if (Fragment.isFragment(value)) { return value; }\n\n if (typeof(value) === \"string\") {\n return Fragment.fromString(value);\n }\n\n return Fragment.fromObject(value);\n }\n\n static fromObject(value: Fragment | JsonFragment): Fragment {\n if (Fragment.isFragment(value)) { return value; }\n\n switch (value.type) {\n case \"function\":\n return FunctionFragment.fromObject(value);\n case \"event\":\n return EventFragment.fromObject(value);\n case \"constructor\":\n return ConstructorFragment.fromObject(value);\n case \"error\":\n return ErrorFragment.fromObject(value);\n case \"fallback\":\n case \"receive\":\n // @TODO: Something? Maybe return a FunctionFragment? A custom DefaultFunctionFragment?\n return null;\n }\n\n return logger.throwArgumentError(\"invalid fragment object\", \"value\", value);\n }\n\n static fromString(value: string): Fragment {\n // Make sure the \"returns\" is surrounded by a space and all whitespace is exactly one space\n value = value.replace(/\\s/g, \" \");\n value = value.replace(/\\(/g, \" (\").replace(/\\)/g, \") \").replace(/\\s+/g, \" \");\n value = value.trim();\n\n if (value.split(\" \")[0] === \"event\") {\n return EventFragment.fromString(value.substring(5).trim());\n } else if (value.split(\" \")[0] === \"function\") {\n return FunctionFragment.fromString(value.substring(8).trim());\n } else if (value.split(\"(\")[0].trim() === \"constructor\") {\n return ConstructorFragment.fromString(value.trim());\n } else if (value.split(\" \")[0] === \"error\") {\n return ErrorFragment.fromString(value.substring(5).trim());\n }\n\n return logger.throwArgumentError(\"unsupported fragment\", \"value\", value);\n }\n\n static isFragment(value: any): value is Fragment {\n return !!(value && value._isFragment);\n }\n}\n\ninterface _EventFragment extends _Fragment {\n readonly anonymous: boolean;\n}\n\nexport class EventFragment extends Fragment {\n readonly anonymous: boolean;\n\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"event\",\n anonymous: this.anonymous,\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format)))\n });\n }\n\n let result = \"\";\n\n if (format !== FormatTypes.sighash) {\n result += \"event \";\n }\n\n result += this.name + \"(\" + this.inputs.map(\n (input) => input.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \") \";\n\n if (format !== FormatTypes.sighash) {\n if (this.anonymous) {\n result += \"anonymous \";\n }\n }\n\n return result.trim();\n }\n\n static from(value: EventFragment | JsonFragment | string): EventFragment {\n if (typeof(value) === \"string\") {\n return EventFragment.fromString(value);\n }\n return EventFragment.fromObject(value);\n }\n\n static fromObject(value: JsonFragment | EventFragment): EventFragment {\n if (EventFragment.isEventFragment(value)) { return value; }\n\n if (value.type !== \"event\") {\n logger.throwArgumentError(\"invalid event object\", \"value\", value);\n }\n\n const params: TypeCheck<_EventFragment> = {\n name: verifyIdentifier(value.name),\n anonymous: value.anonymous,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []),\n type: \"event\"\n };\n\n return new EventFragment(_constructorGuard, params);\n }\n\n static fromString(value: string): EventFragment {\n\n let match = value.match(regexParen);\n if (!match) {\n logger.throwArgumentError(\"invalid event string\", \"value\", value);\n }\n\n let anonymous = false;\n match[3].split(\" \").forEach((modifier) => {\n switch(modifier.trim()) {\n case \"anonymous\":\n anonymous = true;\n break;\n case \"\":\n break;\n default:\n logger.warn(\"unknown modifier: \" + modifier);\n }\n });\n\n return EventFragment.fromObject({\n name: match[1].trim(),\n anonymous: anonymous,\n inputs: parseParams(match[2], true),\n type: \"event\"\n });\n }\n\n static isEventFragment(value: any): value is EventFragment {\n return (value && value._isFragment && value.type === \"event\");\n }\n}\n\nfunction parseGas(value: string, params: any): string {\n params.gas = null;\n\n let comps = value.split(\"@\");\n if (comps.length !== 1) {\n if (comps.length > 2) {\n logger.throwArgumentError(\"invalid human-readable ABI signature\", \"value\", value);\n }\n if (!comps[1].match(/^[0-9]+$/)) {\n logger.throwArgumentError(\"invalid human-readable ABI signature gas\", \"value\", value);\n }\n params.gas = BigNumber.from(comps[1]);\n return comps[0];\n }\n\n return value;\n}\n\nfunction parseModifiers(value: string, params: any): void {\n params.constant = false;\n params.payable = false;\n params.stateMutability = \"nonpayable\";\n\n value.split(\" \").forEach((modifier) => {\n switch (modifier.trim()) {\n case \"constant\":\n params.constant = true;\n break;\n case \"payable\":\n params.payable = true;\n params.stateMutability = \"payable\";\n break;\n case \"nonpayable\":\n params.payable = false;\n params.stateMutability = \"nonpayable\";\n break;\n case \"pure\":\n params.constant = true;\n params.stateMutability = \"pure\";\n break;\n case \"view\":\n params.constant = true;\n params.stateMutability = \"view\";\n break;\n case \"external\":\n case \"public\":\n case \"\":\n break;\n default:\n console.log(\"unknown modifier: \" + modifier);\n }\n });\n}\n\ntype StateInputValue = {\n constant?: boolean;\n payable?: boolean;\n stateMutability?: string;\n type?: string;\n};\n\ntype StateOutputValue = {\n constant: boolean;\n payable: boolean;\n stateMutability: string;\n};\n\nfunction verifyState(value: StateInputValue): StateOutputValue {\n let result: any = {\n constant: false,\n payable: true,\n stateMutability: \"payable\"\n };\n\n if (value.stateMutability != null) {\n result.stateMutability = value.stateMutability;\n\n // Set (and check things are consistent) the constant property\n result.constant = (result.stateMutability === \"view\" || result.stateMutability === \"pure\");\n if (value.constant != null) {\n if ((!!value.constant) !== result.constant) {\n logger.throwArgumentError(\"cannot have constant function with mutability \" + result.stateMutability, \"value\", value);\n }\n }\n\n // Set (and check things are consistent) the payable property\n result.payable = (result.stateMutability === \"payable\");\n if (value.payable != null) {\n if ((!!value.payable) !== result.payable) {\n logger.throwArgumentError(\"cannot have payable function with mutability \" + result.stateMutability, \"value\", value);\n }\n }\n\n } else if (value.payable != null) {\n result.payable = !!value.payable;\n\n // If payable we can assume non-constant; otherwise we can't assume\n if (value.constant == null && !result.payable && value.type !== \"constructor\") {\n logger.throwArgumentError(\"unable to determine stateMutability\", \"value\", value);\n }\n\n result.constant = !!value.constant;\n\n if (result.constant) {\n result.stateMutability = \"view\";\n } else {\n result.stateMutability = (result.payable ? \"payable\": \"nonpayable\");\n }\n\n if (result.payable && result.constant) {\n logger.throwArgumentError(\"cannot have constant payable function\", \"value\", value);\n }\n\n } else if (value.constant != null) {\n result.constant = !!value.constant;\n result.payable = !result.constant;\n result.stateMutability = (result.constant ? \"view\": \"payable\");\n\n } else if (value.type !== \"constructor\") {\n logger.throwArgumentError(\"unable to determine stateMutability\", \"value\", value);\n }\n\n return result;\n}\n\ninterface _ConstructorFragment extends _Fragment {\n stateMutability: string;\n payable: boolean;\n gas?: BigNumber;\n}\n\nexport class ConstructorFragment extends Fragment {\n stateMutability: string;\n payable: boolean;\n gas?: BigNumber;\n\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"constructor\",\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability: undefined),\n payable: this.payable,\n gas: (this.gas ? this.gas.toNumber(): undefined),\n inputs: this.inputs.map((input) => JSON.parse(input.format(format)))\n });\n }\n\n if (format === FormatTypes.sighash) {\n logger.throwError(\"cannot format a constructor for sighash\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"format(sighash)\"\n });\n }\n\n let result = \"constructor(\" + this.inputs.map(\n (input) => input.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \") \";\n\n if (this.stateMutability && this.stateMutability !== \"nonpayable\") {\n result += this.stateMutability + \" \";\n }\n\n return result.trim();\n }\n\n static from(value: ConstructorFragment | JsonFragment | string): ConstructorFragment {\n if (typeof(value) === \"string\") {\n return ConstructorFragment.fromString(value);\n }\n return ConstructorFragment.fromObject(value);\n }\n\n static fromObject(value: ConstructorFragment | JsonFragment): ConstructorFragment {\n if (ConstructorFragment.isConstructorFragment(value)) { return value; }\n\n if (value.type !== \"constructor\") {\n logger.throwArgumentError(\"invalid constructor object\", \"value\", value);\n }\n\n let state = verifyState(value);\n if (state.constant) {\n logger.throwArgumentError(\"constructor cannot be constant\", \"value\", value);\n }\n\n const params: TypeCheck<_ConstructorFragment> = {\n name: null,\n type: value.type,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject): []),\n payable: state.payable,\n stateMutability: state.stateMutability,\n gas: (value.gas ? BigNumber.from(value.gas): null)\n };\n\n return new ConstructorFragment(_constructorGuard, params);\n }\n\n static fromString(value: string): ConstructorFragment {\n let params: any = { type: \"constructor\" };\n\n value = parseGas(value, params);\n\n let parens = value.match(regexParen);\n if (!parens || parens[1].trim() !== \"constructor\") {\n logger.throwArgumentError(\"invalid constructor string\", \"value\", value);\n }\n\n params.inputs = parseParams(parens[2].trim(), false);\n\n parseModifiers(parens[3].trim(), params);\n\n return ConstructorFragment.fromObject(params);\n }\n\n static isConstructorFragment(value: any): value is ConstructorFragment {\n return (value && value._isFragment && value.type === \"constructor\");\n }\n}\n\ninterface _FunctionFragment extends _ConstructorFragment {\n constant: boolean;\n outputs?: Array;\n}\n\nexport class FunctionFragment extends ConstructorFragment {\n constant: boolean;\n outputs?: Array;\n\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"function\",\n name: this.name,\n constant: this.constant,\n stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability: undefined),\n payable: this.payable,\n gas: (this.gas ? this.gas.toNumber(): undefined),\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n outputs: this.outputs.map((output) => JSON.parse(output.format(format))),\n });\n }\n\n let result = \"\";\n\n if (format !== FormatTypes.sighash) {\n result += \"function \";\n }\n\n result += this.name + \"(\" + this.inputs.map(\n (input) => input.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \") \";\n\n if (format !== FormatTypes.sighash) {\n if (this.stateMutability) {\n if (this.stateMutability !== \"nonpayable\") {\n result += (this.stateMutability + \" \");\n }\n } else if (this.constant) {\n result += \"view \";\n }\n\n if (this.outputs && this.outputs.length) {\n result += \"returns (\" + this.outputs.map(\n (output) => output.format(format)\n ).join(\", \") + \") \";\n }\n\n if (this.gas != null) {\n result += \"@\" + this.gas.toString() + \" \";\n }\n }\n\n return result.trim();\n }\n\n static from(value: FunctionFragment | JsonFragment | string): FunctionFragment {\n if (typeof(value) === \"string\") {\n return FunctionFragment.fromString(value);\n }\n return FunctionFragment.fromObject(value);\n }\n\n static fromObject(value: FunctionFragment | JsonFragment): FunctionFragment {\n if (FunctionFragment.isFunctionFragment(value)) { return value; }\n\n if (value.type !== \"function\") {\n logger.throwArgumentError(\"invalid function object\", \"value\", value);\n }\n\n let state = verifyState(value);\n\n const params: TypeCheck<_FunctionFragment> = {\n type: value.type,\n name: verifyIdentifier(value.name),\n constant: state.constant,\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject): []),\n outputs: (value.outputs ? value.outputs.map(ParamType.fromObject): [ ]),\n payable: state.payable,\n stateMutability: state.stateMutability,\n gas: (value.gas ? BigNumber.from(value.gas): null)\n };\n\n return new FunctionFragment(_constructorGuard, params);\n }\n\n static fromString(value: string): FunctionFragment {\n let params: any = { type: \"function\" };\n value = parseGas(value, params);\n\n let comps = value.split(\" returns \");\n if (comps.length > 2) {\n logger.throwArgumentError(\"invalid function string\", \"value\", value);\n }\n\n let parens = comps[0].match(regexParen);\n if (!parens) {\n logger.throwArgumentError(\"invalid function signature\", \"value\", value);\n }\n\n params.name = parens[1].trim();\n if (params.name) { verifyIdentifier(params.name); }\n\n params.inputs = parseParams(parens[2], false);\n\n parseModifiers(parens[3].trim(), params);\n\n // We have outputs\n if (comps.length > 1) {\n let returns = comps[1].match(regexParen);\n if (returns[1].trim() != \"\" || returns[3].trim() != \"\") {\n logger.throwArgumentError(\"unexpected tokens\", \"value\", value);\n }\n params.outputs = parseParams(returns[2], false);\n } else {\n params.outputs = [ ];\n }\n\n return FunctionFragment.fromObject(params);\n }\n\n static isFunctionFragment(value: any): value is FunctionFragment {\n return (value && value._isFragment && value.type === \"function\");\n }\n}\n\n//export class StructFragment extends Fragment {\n//}\n\nfunction checkForbidden(fragment: ErrorFragment): ErrorFragment {\n const sig = fragment.format();\n if (sig === \"Error(string)\" || sig === \"Panic(uint256)\") {\n logger.throwArgumentError(`cannot specify user defined ${ sig } error`, \"fragment\", fragment);\n }\n return fragment;\n}\n\nexport class ErrorFragment extends Fragment {\n\n format(format?: string): string {\n if (!format) { format = FormatTypes.sighash; }\n if (!FormatTypes[format]) {\n logger.throwArgumentError(\"invalid format type\", \"format\", format);\n }\n\n if (format === FormatTypes.json) {\n return JSON.stringify({\n type: \"error\",\n name: this.name,\n inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n });\n }\n\n let result = \"\";\n\n if (format !== FormatTypes.sighash) {\n result += \"error \";\n }\n\n result += this.name + \"(\" + this.inputs.map(\n (input) => input.format(format)\n ).join((format === FormatTypes.full) ? \", \": \",\") + \") \";\n\n return result.trim();\n }\n\n static from(value: ErrorFragment | JsonFragment | string): ErrorFragment {\n if (typeof(value) === \"string\") {\n return ErrorFragment.fromString(value);\n }\n return ErrorFragment.fromObject(value);\n }\n\n static fromObject(value: ErrorFragment | JsonFragment): ErrorFragment {\n if (ErrorFragment.isErrorFragment(value)) { return value; }\n\n if (value.type !== \"error\") {\n logger.throwArgumentError(\"invalid error object\", \"value\", value);\n }\n\n const params: TypeCheck<_Fragment> = {\n type: value.type,\n name: verifyIdentifier(value.name),\n inputs: (value.inputs ? value.inputs.map(ParamType.fromObject): [])\n };\n\n return checkForbidden(new ErrorFragment(_constructorGuard, params));\n }\n\n static fromString(value: string): ErrorFragment {\n let params: any = { type: \"error\" };\n\n let parens = value.match(regexParen);\n if (!parens) {\n logger.throwArgumentError(\"invalid error signature\", \"value\", value);\n }\n\n params.name = parens[1].trim();\n if (params.name) { verifyIdentifier(params.name); }\n\n params.inputs = parseParams(parens[2], false);\n\n return checkForbidden(ErrorFragment.fromObject(params));\n }\n\n static isErrorFragment(value: any): value is ErrorFragment {\n return (value && value._isFragment && value.type === \"error\");\n }\n}\n\nfunction verifyType(type: string): string {\n\n // These need to be transformed to their full description\n if (type.match(/^uint($|[^1-9])/)) {\n type = \"uint256\" + type.substring(4);\n } else if (type.match(/^int($|[^1-9])/)) {\n type = \"int256\" + type.substring(3);\n }\n\n // @TODO: more verification\n\n return type;\n}\n\n// See: https://github.com/ethereum/solidity/blob/1f8f1a3db93a548d0555e3e14cfc55a10e25b60e/docs/grammar/SolidityLexer.g4#L234\nconst regexIdentifier = new RegExp(\"^[a-zA-Z$_][a-zA-Z0-9$_]*$\");\nfunction verifyIdentifier(value: string): string {\n if (!value || !value.match(regexIdentifier)) {\n logger.throwArgumentError(`invalid identifier \"${ value }\"`, \"value\", value);\n }\n return value;\n}\n\nconst regexParen = new RegExp(\"^([^)(]*)\\\\((.*)\\\\)([^)(]*)$\");\n\nfunction splitNesting(value: string): Array {\n value = value.trim();\n\n let result = [];\n let accum = \"\";\n let depth = 0;\n for (let offset = 0; offset < value.length; offset++) {\n let c = value[offset];\n if (c === \",\" && depth === 0) {\n result.push(accum);\n accum = \"\";\n } else {\n accum += c;\n if (c === \"(\") {\n depth++;\n } else if (c === \")\") {\n depth--;\n if (depth === -1) {\n logger.throwArgumentError(\"unbalanced parenthesis\", \"value\", value);\n }\n }\n }\n }\n if (accum) { result.push(accum); }\n\n return result;\n}\n\n","\"use strict\";\n\nimport { arrayify, BytesLike, concat, hexConcat, hexlify } from \"@ethersproject/bytes\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"../_version\";\nconst logger = new Logger(version);\n\nexport interface Result extends ReadonlyArray {\n readonly [key: string]: any;\n}\n\nexport function checkResultErrors(result: Result): Array<{ path: Array, error: Error }> {\n // Find the first error (if any)\n const errors: Array<{ path: Array, error: Error }> = [ ];\n\n const checkErrors = function(path: Array, object: any): void {\n if (!Array.isArray(object)) { return; }\n for (let key in object) {\n const childPath = path.slice();\n childPath.push(key);\n\n try {\n checkErrors(childPath, object[key]);\n } catch (error) {\n errors.push({ path: childPath, error: error });\n }\n }\n }\n checkErrors([ ], result);\n\n return errors;\n\n}\n\nexport type CoerceFunc = (type: string, value: any) => any;\n\nexport abstract class Coder {\n\n // The coder name:\n // - address, uint256, tuple, array, etc.\n readonly name: string;\n\n // The fully expanded type, including composite types:\n // - address, uint256, tuple(address,bytes), uint256[3][4][], etc.\n readonly type: string;\n\n // The localName bound in the signature, in this example it is \"baz\":\n // - tuple(address foo, uint bar) baz\n readonly localName: string;\n\n // Whether this type is dynamic:\n // - Dynamic: bytes, string, address[], tuple(boolean[]), etc.\n // - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8)\n readonly dynamic: boolean;\n\n constructor(name: string, type: string, localName: string, dynamic: boolean) {\n // @TODO: defineReadOnly these\n this.name = name;\n this.type = type;\n this.localName = localName;\n this.dynamic = dynamic;\n }\n\n _throwError(message: string, value: any): void {\n logger.throwArgumentError(message, this.localName, value);\n }\n\n abstract encode(writer: Writer, value: any): number;\n abstract decode(reader: Reader): any;\n\n abstract defaultValue(): any;\n}\n\nexport class Writer {\n readonly wordSize: number;\n\n _data: Array;\n _dataLength: number;\n _padding: Uint8Array;\n\n constructor(wordSize?: number) {\n defineReadOnly(this, \"wordSize\", wordSize || 32);\n this._data = [ ];\n this._dataLength = 0;\n this._padding = new Uint8Array(wordSize);\n }\n\n get data(): string {\n return hexConcat(this._data);\n }\n get length(): number { return this._dataLength; }\n\n _writeData(data: Uint8Array): number {\n this._data.push(data);\n this._dataLength += data.length;\n return data.length;\n }\n\n appendWriter(writer: Writer): number {\n return this._writeData(concat(writer._data));\n }\n\n // Arrayish items; padded on the right to wordSize\n writeBytes(value: BytesLike): number {\n let bytes = arrayify(value);\n const paddingOffset = bytes.length % this.wordSize;\n if (paddingOffset) {\n bytes = concat([ bytes, this._padding.slice(paddingOffset) ])\n }\n return this._writeData(bytes);\n }\n\n _getValue(value: BigNumberish): Uint8Array {\n let bytes = arrayify(BigNumber.from(value));\n if (bytes.length > this.wordSize) {\n logger.throwError(\"value out-of-bounds\", Logger.errors.BUFFER_OVERRUN, {\n length: this.wordSize,\n offset: bytes.length\n });\n }\n if (bytes.length % this.wordSize) {\n bytes = concat([ this._padding.slice(bytes.length % this.wordSize), bytes ]);\n }\n return bytes;\n }\n\n // BigNumberish items; padded on the left to wordSize\n writeValue(value: BigNumberish): number {\n return this._writeData(this._getValue(value));\n }\n\n writeUpdatableValue(): (value: BigNumberish) => void {\n const offset = this._data.length;\n this._data.push(this._padding);\n this._dataLength += this.wordSize;\n return (value: BigNumberish) => {\n this._data[offset] = this._getValue(value);\n };\n }\n}\n\nexport class Reader {\n readonly wordSize: number;\n readonly allowLoose: boolean;\n\n readonly _data: Uint8Array;\n readonly _coerceFunc: CoerceFunc;\n\n _offset: number;\n\n constructor(data: BytesLike, wordSize?: number, coerceFunc?: CoerceFunc, allowLoose?: boolean) {\n defineReadOnly(this, \"_data\", arrayify(data));\n defineReadOnly(this, \"wordSize\", wordSize || 32);\n defineReadOnly(this, \"_coerceFunc\", coerceFunc);\n defineReadOnly(this, \"allowLoose\", allowLoose);\n\n this._offset = 0;\n }\n\n get data(): string { return hexlify(this._data); }\n get consumed(): number { return this._offset; }\n\n // The default Coerce function\n static coerce(name: string, value: any): any {\n let match = name.match(\"^u?int([0-9]+)$\");\n if (match && parseInt(match[1]) <= 48) { value = value.toNumber(); }\n return value;\n }\n\n coerce(name: string, value: any): any {\n if (this._coerceFunc) { return this._coerceFunc(name, value); }\n return Reader.coerce(name, value);\n }\n\n _peekBytes(offset: number, length: number, loose?: boolean): Uint8Array {\n let alignedLength = Math.ceil(length / this.wordSize) * this.wordSize;\n if (this._offset + alignedLength > this._data.length) {\n if (this.allowLoose && loose && this._offset + length <= this._data.length) {\n alignedLength = length;\n } else {\n logger.throwError(\"data out-of-bounds\", Logger.errors.BUFFER_OVERRUN, {\n length: this._data.length,\n offset: this._offset + alignedLength\n });\n }\n }\n return this._data.slice(this._offset, this._offset + alignedLength)\n }\n\n subReader(offset: number): Reader {\n return new Reader(this._data.slice(this._offset + offset), this.wordSize, this._coerceFunc, this.allowLoose);\n }\n\n readBytes(length: number, loose?: boolean): Uint8Array {\n let bytes = this._peekBytes(0, length, !!loose);\n this._offset += bytes.length;\n // @TODO: Make sure the length..end bytes are all 0?\n return bytes.slice(0, length);\n }\n\n readValue(): BigNumber {\n return BigNumber.from(this.readBytes(this.wordSize));\n }\n}\n","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","\"use strict\";\n\nimport sha3 from \"js-sha3\";\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\n\nexport function keccak256(data: BytesLike): string {\n return '0x' + sha3.keccak_256(arrayify(data));\n}\n","export const version = \"address/5.7.0\";\n","\"use strict\";\n\nimport { arrayify, BytesLike, concat, hexDataLength, hexDataSlice, isHexString, stripZeros } from \"@ethersproject/bytes\";\nimport { BigNumber, BigNumberish, _base16To36, _base36To16 } from \"@ethersproject/bignumber\";\nimport { keccak256 } from \"@ethersproject/keccak256\";\nimport { encode } from \"@ethersproject/rlp\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nfunction getChecksumAddress(address: string): string {\n if (!isHexString(address, 20)) {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n\n address = address.toLowerCase();\n\n const chars = address.substring(2).split(\"\");\n\n const expanded = new Uint8Array(40);\n for (let i = 0; i < 40; i++) {\n expanded[i] = chars[i].charCodeAt(0);\n }\n\n const hashed = arrayify(keccak256(expanded));\n\n for (let i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return \"0x\" + chars.join(\"\");\n}\n\n// Shims for environments that are missing some required constants and functions\nconst MAX_SAFE_INTEGER: number = 0x1fffffffffffff;\n\nfunction log10(x: number): number {\n if (Math.log10) { return Math.log10(x); }\n return Math.log(x) / Math.LN10;\n}\n\n\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n\n// Create lookup table\nconst ibanLookup: { [character: string]: string } = { };\nfor (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); }\nfor (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); }\n\n// How many decimal digits can we process? (for 64-bit float, this is 15)\nconst safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\n\nfunction ibanChecksum(address: string): string {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + \"00\";\n\n let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits){\n let block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) { checksum = \"0\" + checksum; }\n\n return checksum;\n};\n\nexport function getAddress(address: string): string {\n let result = null;\n\n if (typeof(address) !== \"string\") {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n\n // Missing the 0x prefix\n if (address.substring(0, 2) !== \"0x\") { address = \"0x\" + address; }\n\n result = getChecksumAddress(address);\n\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n }\n\n // Maybe ICAP? (we only support direct mode)\n } else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n }\n\n result = _base36To16(address.substring(4));\n while (result.length < 40) { result = \"0\" + result; }\n result = getChecksumAddress(\"0x\" + result);\n\n } else {\n logger.throwArgumentError(\"invalid address\", \"address\", address);\n }\n\n return result;\n}\n\nexport function isAddress(address: string): boolean {\n try {\n getAddress(address);\n return true;\n } catch (error) { }\n return false;\n}\n\nexport function getIcapAddress(address: string): string {\n let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n while (base36.length < 30) { base36 = \"0\" + base36; }\n return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nexport function getContractAddress(transaction: { from: string, nonce: BigNumberish }) {\n let from: string = null;\n try {\n from = getAddress(transaction.from);\n } catch (error) {\n logger.throwArgumentError(\"missing from address\", \"transaction\", transaction);\n }\n\n const nonce = stripZeros(arrayify(BigNumber.from(transaction.nonce).toHexString()));\n\n return getAddress(hexDataSlice(keccak256(encode([ from, nonce ])), 12));\n}\n\nexport function getCreate2Address(from: string, salt: BytesLike, initCodeHash: BytesLike): string {\n if (hexDataLength(salt) !== 32) {\n logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", salt);\n }\n if (hexDataLength(initCodeHash) !== 32) {\n logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", initCodeHash);\n }\n return getAddress(hexDataSlice(keccak256(concat([ \"0xff\", getAddress(from), salt, initCodeHash ])), 12))\n}\n","\"use strict\";\n\nimport { getAddress } from \"@ethersproject/address\";\nimport { hexZeroPad } from \"@ethersproject/bytes\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class AddressCoder extends Coder {\n\n constructor(localName: string) {\n super(\"address\", \"address\", localName, false);\n }\n\n defaultValue(): string {\n return \"0x0000000000000000000000000000000000000000\";\n }\n\n encode(writer: Writer, value: string): number {\n try {\n value = getAddress(value)\n } catch (error) {\n this._throwError(error.message, value);\n }\n return writer.writeValue(value);\n }\n\n decode(reader: Reader): any {\n return getAddress(hexZeroPad(reader.readValue().toHexString(), 20));\n }\n}\n\n","\"use strict\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\n// Clones the functionality of an existing Coder, but without a localName\nexport class AnonymousCoder extends Coder {\n private coder: Coder;\n\n constructor(coder: Coder) {\n super(coder.name, coder.type, undefined, coder.dynamic);\n this.coder = coder;\n }\n\n defaultValue(): any {\n return this.coder.defaultValue();\n }\n\n encode(writer: Writer, value: any): number {\n return this.coder.encode(writer, value);\n }\n\n decode(reader: Reader): any {\n return this.coder.decode(reader);\n }\n}\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"../_version\";\nconst logger = new Logger(version);\n\nimport { Coder, Reader, Result, Writer } from \"./abstract-coder\";\nimport { AnonymousCoder } from \"./anonymous\";\n\nexport function pack(writer: Writer, coders: ReadonlyArray, values: Array | { [ name: string ]: any }): number {\n let arrayValues: Array = null;\n\n if (Array.isArray(values)) {\n arrayValues = values;\n\n } else if (values && typeof(values) === \"object\") {\n let unique: { [ name: string ]: boolean } = { };\n\n arrayValues = coders.map((coder) => {\n const name = coder.localName;\n if (!name) {\n logger.throwError(\"cannot encode object for signature with missing names\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"values\",\n coder: coder,\n value: values\n });\n }\n\n if (unique[name]) {\n logger.throwError(\"cannot encode object for signature with duplicate names\", Logger.errors.INVALID_ARGUMENT, {\n argument: \"values\",\n coder: coder,\n value: values\n });\n }\n\n unique[name] = true;\n\n return values[name];\n });\n\n } else {\n logger.throwArgumentError(\"invalid tuple value\", \"tuple\", values);\n }\n\n if (coders.length !== arrayValues.length) {\n logger.throwArgumentError(\"types/value length mismatch\", \"tuple\", values);\n }\n\n let staticWriter = new Writer(writer.wordSize);\n let dynamicWriter = new Writer(writer.wordSize);\n\n let updateFuncs: Array<(baseOffset: number) => void> = [];\n coders.forEach((coder, index) => {\n let value = arrayValues[index];\n\n if (coder.dynamic) {\n // Get current dynamic offset (for the future pointer)\n let dynamicOffset = dynamicWriter.length;\n\n // Encode the dynamic value into the dynamicWriter\n coder.encode(dynamicWriter, value);\n\n // Prepare to populate the correct offset once we are done\n let updateFunc = staticWriter.writeUpdatableValue();\n updateFuncs.push((baseOffset: number) => {\n updateFunc(baseOffset + dynamicOffset);\n });\n\n } else {\n coder.encode(staticWriter, value);\n }\n });\n\n // Backfill all the dynamic offsets, now that we know the static length\n updateFuncs.forEach((func) => { func(staticWriter.length); });\n\n let length = writer.appendWriter(staticWriter);\n length += writer.appendWriter(dynamicWriter);\n return length;\n}\n\nexport function unpack(reader: Reader, coders: Array): Result {\n let values: any = [];\n\n // A reader anchored to this base\n let baseReader = reader.subReader(0);\n\n coders.forEach((coder) => {\n let value: any = null;\n\n if (coder.dynamic) {\n let offset = reader.readValue();\n let offsetReader = baseReader.subReader(offset.toNumber());\n try {\n value = coder.decode(offsetReader);\n } catch (error) {\n // Cannot recover from this\n if (error.code === Logger.errors.BUFFER_OVERRUN) { throw error; }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n\n } else {\n try {\n value = coder.decode(reader);\n } catch (error) {\n // Cannot recover from this\n if (error.code === Logger.errors.BUFFER_OVERRUN) { throw error; }\n value = error;\n value.baseType = coder.name;\n value.name = coder.localName;\n value.type = coder.type;\n }\n }\n\n if (value != undefined) {\n values.push(value);\n }\n });\n\n // We only output named properties for uniquely named coders\n const uniqueNames = coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) { accum[name] = 0; }\n accum[name]++;\n }\n return accum;\n }, <{ [ name: string ]: number }>{ });\n\n // Add any named parameters (i.e. tuples)\n coders.forEach((coder: Coder, index: number) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) { return; }\n\n if (name === \"length\") { name = \"_length\"; }\n\n if (values[name] != null) { return; }\n\n const value = values[index];\n\n if (value instanceof Error) {\n Object.defineProperty(values, name, {\n enumerable: true,\n get: () => { throw value; }\n });\n } else {\n values[name] = value;\n }\n });\n\n for (let i = 0; i < values.length; i++) {\n const value = values[i];\n if (value instanceof Error) {\n Object.defineProperty(values, i, {\n enumerable: true,\n get: () => { throw value; }\n });\n }\n }\n\n return Object.freeze(values);\n}\n\n\nexport class ArrayCoder extends Coder {\n readonly coder: Coder;\n readonly length: number;\n\n constructor(coder: Coder, length: number, localName: string) {\n const type = (coder.type + \"[\" + (length >= 0 ? length: \"\") + \"]\");\n const dynamic = (length === -1 || coder.dynamic);\n super(\"array\", type, localName, dynamic);\n\n this.coder = coder;\n this.length = length;\n }\n\n defaultValue(): Array {\n // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n const defaultChild = this.coder.defaultValue();\n\n const result: Array = [];\n for (let i = 0; i < this.length; i++) {\n result.push(defaultChild);\n }\n return result;\n }\n\n encode(writer: Writer, value: Array): number {\n if (!Array.isArray(value)) {\n this._throwError(\"expected array value\", value);\n }\n\n let count = this.length;\n\n if (count === -1) {\n count = value.length;\n writer.writeValue(value.length);\n }\n\n logger.checkArgumentCount(value.length, count, \"coder array\" + (this.localName? (\" \"+ this.localName): \"\"));\n\n let coders = [];\n for (let i = 0; i < value.length; i++) { coders.push(this.coder); }\n\n return pack(writer, coders, value);\n }\n\n decode(reader: Reader): any {\n let count = this.length;\n if (count === -1) {\n count = reader.readValue().toNumber();\n\n // Check that there is *roughly* enough data to ensure\n // stray random data is not being read as a length. Each\n // slot requires at least 32 bytes for their value (or 32\n // bytes as a link to the data). This could use a much\n // tighter bound, but we are erroring on the side of safety.\n if (count * 32 > reader._data.length) {\n logger.throwError(\"insufficient data length\", Logger.errors.BUFFER_OVERRUN, {\n length: reader._data.length,\n count: count\n });\n }\n }\n let coders = [];\n for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); }\n\n return reader.coerce(this.name, unpack(reader, coders));\n }\n}\n\n","\"use strict\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class BooleanCoder extends Coder {\n\n constructor(localName: string) {\n super(\"bool\", \"bool\", localName, false);\n }\n\n defaultValue(): boolean {\n return false;\n }\n\n encode(writer: Writer, value: boolean): number {\n return writer.writeValue(value ? 1: 0);\n }\n\n decode(reader: Reader): any {\n return reader.coerce(this.type, !reader.readValue().isZero());\n }\n}\n\n","\"use strict\";\n\nimport { arrayify, hexlify } from \"@ethersproject/bytes\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class DynamicBytesCoder extends Coder {\n constructor(type: string, localName: string) {\n super(type, type, localName, true);\n }\n\n defaultValue(): string {\n return \"0x\";\n }\n\n encode(writer: Writer, value: any): number {\n value = arrayify(value);\n let length = writer.writeValue(value.length);\n length += writer.writeBytes(value);\n return length;\n }\n\n decode(reader: Reader): any {\n return reader.readBytes(reader.readValue().toNumber(), true);\n }\n}\n\nexport class BytesCoder extends DynamicBytesCoder {\n constructor(localName: string) {\n super(\"bytes\", localName);\n }\n\n decode(reader: Reader): any {\n return reader.coerce(this.name, hexlify(super.decode(reader)));\n }\n}\n\n\n","\"use strict\";\n\nimport { arrayify, BytesLike, hexlify } from \"@ethersproject/bytes\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\n// @TODO: Merge this with bytes\nexport class FixedBytesCoder extends Coder {\n readonly size: number;\n\n constructor(size: number, localName: string) {\n let name = \"bytes\" + String(size);\n super(name, name, localName, false);\n this.size = size;\n }\n\n defaultValue(): string {\n return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n }\n\n encode(writer: Writer, value: BytesLike): number {\n let data = arrayify(value);\n if (data.length !== this.size) { this._throwError(\"incorrect data length\", value); }\n return writer.writeBytes(data);\n }\n\n decode(reader: Reader): any {\n return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));\n }\n}\n","\"use strict\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class NullCoder extends Coder {\n\n constructor(localName: string) {\n super(\"null\", \"\", localName, false);\n }\n\n defaultValue(): null {\n return null;\n }\n\n encode(writer: Writer, value: any): number {\n if (value != null) { this._throwError(\"not null\", value); }\n return writer.writeBytes([ ]);\n }\n\n decode(reader: Reader): any {\n reader.readBytes(0);\n return reader.coerce(this.name, null);\n }\n}\n","import { BigNumber } from \"@ethersproject/bignumber\";\n\nconst NegativeOne: BigNumber = (/*#__PURE__*/BigNumber.from(-1));\nconst Zero: BigNumber = (/*#__PURE__*/BigNumber.from(0));\nconst One: BigNumber = (/*#__PURE__*/BigNumber.from(1));\nconst Two: BigNumber = (/*#__PURE__*/BigNumber.from(2));\nconst WeiPerEther: BigNumber = (/*#__PURE__*/BigNumber.from(\"1000000000000000000\"));\nconst MaxUint256: BigNumber = (/*#__PURE__*/BigNumber.from(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"));\n\nconst MinInt256: BigNumber = (/*#__PURE__*/BigNumber.from(\"-0x8000000000000000000000000000000000000000000000000000000000000000\"));\nconst MaxInt256: BigNumber = (/*#__PURE__*/BigNumber.from(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"));\n\nexport {\n NegativeOne,\n Zero,\n One,\n Two,\n WeiPerEther,\n MaxUint256,\n MinInt256,\n MaxInt256,\n};\n","export const HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n\n","\"use strict\";\n\nexport { AddressZero } from \"./addresses\";\nexport {\n NegativeOne,\n Zero,\n One,\n Two,\n WeiPerEther,\n MaxUint256,\n MinInt256,\n MaxInt256\n} from \"./bignumbers\";\nexport { HashZero } from \"./hashes\";\nexport { EtherSymbol } from \"./strings\";\n\n","\"use strict\";\n\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { MaxUint256, NegativeOne, One, Zero } from \"@ethersproject/constants\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\n\nexport class NumberCoder extends Coder {\n readonly size: number;\n readonly signed: boolean;\n\n constructor(size: number, signed: boolean, localName: string) {\n const name = ((signed ? \"int\": \"uint\") + (size * 8));\n super(name, name, localName, false);\n\n this.size = size;\n this.signed = signed;\n }\n\n defaultValue(): number {\n return 0;\n }\n\n encode(writer: Writer, value: BigNumberish): number {\n let v = BigNumber.from(value);\n\n // Check bounds are safe for encoding\n let maxUintValue = MaxUint256.mask(writer.wordSize * 8);\n if (this.signed) {\n let bounds = maxUintValue.mask(this.size * 8 - 1);\n if (v.gt(bounds) || v.lt(bounds.add(One).mul(NegativeOne))) {\n this._throwError(\"value out-of-bounds\", value);\n }\n } else if (v.lt(Zero) || v.gt(maxUintValue.mask(this.size * 8))) {\n this._throwError(\"value out-of-bounds\", value);\n }\n\n v = v.toTwos(this.size * 8).mask(this.size * 8);\n\n if (this.signed) {\n v = v.fromTwos(this.size * 8).toTwos(8 * writer.wordSize);\n }\n\n return writer.writeValue(v);\n }\n\n decode(reader: Reader): any {\n let value = reader.readValue().mask(this.size * 8);\n\n if (this.signed) {\n value = value.fromTwos(this.size * 8);\n }\n\n return reader.coerce(this.name, value);\n }\n}\n\n","export const version = \"strings/5.7.0\";\n","\"use strict\";\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n///////////////////////////////\n\nexport enum UnicodeNormalizationForm {\n current = \"\",\n NFC = \"NFC\",\n NFD = \"NFD\",\n NFKC = \"NFKC\",\n NFKD = \"NFKD\"\n};\n\nexport enum Utf8ErrorReason {\n // A continuation byte was present where there was nothing to continue\n // - offset = the index the codepoint began in\n UNEXPECTED_CONTINUE = \"unexpected continuation byte\",\n\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n // - offset = the index the codepoint began in\n BAD_PREFIX = \"bad codepoint prefix\",\n\n // The string is too short to process the expected codepoint\n // - offset = the index the codepoint began in\n OVERRUN = \"string overrun\",\n\n // A missing continuation byte was expected but not found\n // - offset = the index the continuation byte was expected at\n MISSING_CONTINUE = \"missing continuation byte\",\n\n // The computed code point is outside the range for UTF-8\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\n OUT_OF_RANGE = \"out of UTF-8 range\",\n\n // UTF-8 strings may not contain UTF-16 surrogate pairs\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n UTF16_SURROGATE = \"UTF-16 surrogate\",\n\n // The string is an overlong representation\n // - offset = start of this codepoint\n // - badCodepoint = the computed codepoint; already bounds checked\n OVERLONG = \"overlong representation\",\n};\n\n\nexport type Utf8ErrorFunc = (reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number) => number;\n\nfunction errorFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number {\n return logger.throwArgumentError(`invalid codepoint at offset ${ offset }; ${ reason }`, \"bytes\", bytes);\n}\n\nfunction ignoreFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number {\n\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n let i = 0;\n for (let o = offset + 1; o < bytes.length; o++) {\n if (bytes[o] >> 6 !== 0x02) { break; }\n i++;\n }\n return i;\n }\n\n // This byte runs us past the end of the string, so just jump to the end\n // (but the first byte was read already read and therefore skipped)\n if (reason === Utf8ErrorReason.OVERRUN) {\n return bytes.length - offset - 1;\n }\n\n // Nothing to skip\n return 0;\n}\n\nfunction replaceFunc(reason: Utf8ErrorReason, offset: number, bytes: ArrayLike, output: Array, badCodepoint?: number): number {\n\n // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n if (reason === Utf8ErrorReason.OVERLONG) {\n output.push(badCodepoint);\n return 0;\n }\n\n // Put the replacement character into the output\n output.push(0xfffd);\n\n // Otherwise, process as if ignoring errors\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n\n// Common error handing strategies\nexport const Utf8ErrorFuncs: { [ name: string ]: Utf8ErrorFunc } = Object.freeze({\n error: errorFunc,\n ignore: ignoreFunc,\n replace: replaceFunc\n});\n\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(bytes: BytesLike, onError?: Utf8ErrorFunc): Array {\n if (onError == null) { onError = Utf8ErrorFuncs.error; }\n\n bytes = arrayify(bytes);\n\n const result: Array = [];\n let i = 0;\n\n // Invalid bytes are ignored\n while(i < bytes.length) {\n\n const c = bytes[i++];\n\n // 0xxx xxxx\n if (c >> 7 === 0) {\n result.push(c);\n continue;\n }\n\n // Multibyte; how many bytes left for this character?\n let extraLength = null;\n let overlongMask = null;\n\n // 110x xxxx 10xx xxxx\n if ((c & 0xe0) === 0xc0) {\n extraLength = 1;\n overlongMask = 0x7f;\n\n // 1110 xxxx 10xx xxxx 10xx xxxx\n } else if ((c & 0xf0) === 0xe0) {\n extraLength = 2;\n overlongMask = 0x7ff;\n\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n } else if ((c & 0xf8) === 0xf0) {\n extraLength = 3;\n overlongMask = 0xffff;\n\n } else {\n if ((c & 0xc0) === 0x80) {\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n } else {\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n }\n continue;\n }\n\n // Do we have enough bytes in our data?\n if (i - 1 + extraLength >= bytes.length) {\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n continue;\n }\n\n // Remove the length prefix from the char\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\n\n for (let j = 0; j < extraLength; j++) {\n let nextChar = bytes[i];\n\n // Invalid continuation byte\n if ((nextChar & 0xc0) != 0x80) {\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n res = null;\n break;\n };\n\n res = (res << 6) | (nextChar & 0x3f);\n i++;\n }\n\n // See above loop for invalid continuation byte\n if (res === null) { continue; }\n\n // Maximum code point\n if (res > 0x10ffff) {\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n\n // Reserved for UTF-16 surrogate halves\n if (res >= 0xd800 && res <= 0xdfff) {\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n\n // Check for overlong sequences (more bytes than needed)\n if (res <= overlongMask) {\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n continue;\n }\n\n result.push(res);\n }\n\n return result;\n}\n\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nexport function toUtf8Bytes(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Uint8Array {\n\n if (form != UnicodeNormalizationForm.current) {\n logger.checkNormalize();\n str = str.normalize(form);\n }\n\n let result = [];\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n\n if (c < 0x80) {\n result.push(c);\n\n } else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n\n } else if ((c & 0xfc00) == 0xd800) {\n i++;\n const c2 = str.charCodeAt(i);\n\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new Error(\"invalid utf-8 string\");\n }\n\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n\n } else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n\n return arrayify(result);\n};\n\nfunction escapeChar(value: number) {\n const hex = (\"0000\" + value.toString(16));\n return \"\\\\u\" + hex.substring(hex.length - 4);\n}\n\nexport function _toEscapedUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string {\n return '\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\n if (codePoint < 256) {\n switch (codePoint) {\n case 8: return \"\\\\b\";\n case 9: return \"\\\\t\";\n case 10: return \"\\\\n\"\n case 13: return \"\\\\r\";\n case 34: return \"\\\\\\\"\";\n case 92: return \"\\\\\\\\\";\n }\n\n if (codePoint >= 32 && codePoint < 127) {\n return String.fromCharCode(codePoint);\n }\n }\n\n if (codePoint <= 0xffff) {\n return escapeChar(codePoint);\n }\n\n codePoint -= 0x10000;\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n }).join(\"\") + '\"';\n}\n\nexport function _toUtf8String(codePoints: Array): string {\n return codePoints.map((codePoint) => {\n if (codePoint <= 0xffff) {\n return String.fromCharCode(codePoint);\n }\n codePoint -= 0x10000;\n return String.fromCharCode(\n (((codePoint >> 10) & 0x3ff) + 0xd800),\n ((codePoint & 0x3ff) + 0xdc00)\n );\n }).join(\"\");\n}\n\nexport function toUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string {\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n\nexport function toUtf8CodePoints(str: string, form: UnicodeNormalizationForm = UnicodeNormalizationForm.current): Array {\n return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n","\"use strict\";\n\nimport { HashZero } from \"@ethersproject/constants\";\nimport { arrayify, BytesLike, concat, hexlify } from \"@ethersproject/bytes\";\n\nimport { toUtf8Bytes, toUtf8String } from \"./utf8\";\n\n\nexport function formatBytes32String(text: string): string {\n\n // Get the bytes\n const bytes = toUtf8Bytes(text);\n\n // Check we have room for null-termination\n if (bytes.length > 31) { throw new Error(\"bytes32 string must be less than 32 bytes\"); }\n\n // Zero-pad (implicitly null-terminates)\n return hexlify(concat([ bytes, HashZero ]).slice(0, 32));\n}\n\nexport function parseBytes32String(bytes: BytesLike): string {\n const data = arrayify(bytes);\n\n // Must be 32 bytes with a null-termination\n if (data.length !== 32) { throw new Error(\"invalid bytes32 - not 32 bytes long\"); }\n if (data[31] !== 0) { throw new Error(\"invalid bytes32 string - no null terminator\"); }\n\n // Find the null termination\n let length = 31;\n while (data[length - 1] === 0) { length--; }\n\n // Determine the string value\n return toUtf8String(data.slice(0, length));\n}\n\n","\"use strict\";\n\nimport { toUtf8CodePoints, _toUtf8String, UnicodeNormalizationForm } from \"./utf8\";\n\ntype Ranged = {\n l: number, // Lo value\n h: number, // High value (less the lo)\n d?: number, // Delta/stride (default: 1)\n s?: number, // Shift (default: 1)\n e?: Array // Exceptions to skip\n};\n\ntype Table = { [ src: number ]: Array };\n\nfunction bytes2(data: string): Array {\n if ((data.length % 4) !== 0) { throw new Error(\"bad data\"); }\n let result = [];\n for (let i = 0; i < data.length; i += 4) {\n result.push(parseInt(data.substring(i, i + 4), 16));\n }\n return result;\n}\n\nfunction createTable(data: string, func?: (value: string) => Array): Table {\n if (!func) {\n func = function(value: string) { return [ parseInt(value, 16) ]; }\n }\n\n let lo = 0;\n\n let result: Table = { };\n data.split(\",\").forEach((pair) => {\n let comps = pair.split(\":\");\n lo += parseInt(comps[0], 16);\n result[lo] = func(comps[1]);\n });\n\n return result;\n}\n\nfunction createRangeTable(data: string): Array {\n let hi = 0;\n return data.split(\",\").map((v) => {\n let comps = v.split(\"-\");\n if (comps.length === 1) {\n comps[1] = \"0\";\n } else if (comps[1] === \"\") {\n comps[1] = \"1\";\n }\n\n let lo = hi + parseInt(comps[0], 16);\n hi = parseInt(comps[1], 16);\n return { l: lo, h: hi };\n });\n}\n\nfunction matchMap(value: number, ranges: Array): Ranged {\n let lo = 0;\n for (let i = 0; i < ranges.length; i++) {\n let range = ranges[i];\n lo += range.l;\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n if (range.e && range.e.indexOf(value - lo) !== -1) { continue; }\n return range;\n }\n }\n return null;\n}\n\nconst Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n\n// @TODO: Make this relative...\nconst Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map((v) => parseInt(v, 16));\n\nconst Table_B_2_ranges: Array = [\n { h: 25, s: 32, l: 65 },\n { h: 30, s: 32, e: [ 23 ], l: 127 },\n { h: 54, s: 1, e: [ 48 ], l: 64, d: 2 },\n { h: 14, s: 1, l: 57, d: 2 },\n { h: 44, s: 1, l: 17, d: 2 },\n { h: 10, s: 1, e: [ 2, 6, 8 ], l: 61, d: 2 },\n { h: 16, s: 1, l: 68, d: 2 },\n { h: 84, s: 1, e: [ 18, 24, 66 ], l: 19, d: 2 },\n { h: 26, s: 32, e: [ 17 ], l: 435 },\n { h: 22, s: 1, l: 71, d: 2 },\n { h: 15, s: 80, l: 40 },\n { h: 31, s: 32, l: 16 },\n { h: 32, s: 1, l: 80, d: 2 },\n { h: 52, s: 1, l: 42, d: 2 },\n { h: 12, s: 1, l: 55, d: 2 },\n { h: 40, s: 1, e: [ 38 ], l: 15, d: 2 },\n { h: 14, s: 1, l: 48, d: 2 },\n { h: 37, s: 48, l: 49 },\n { h: 148, s: 1, l: 6351, d: 2 },\n { h: 88, s: 1, l: 160, d: 2 },\n { h: 15, s: 16, l: 704 },\n { h: 25, s: 26, l: 854 },\n { h: 25, s: 32, l: 55915 },\n { h: 37, s: 40, l: 1247 },\n { h: 25, s: -119711, l: 53248 },\n { h: 25, s: -119763, l: 52 },\n { h: 25, s: -119815, l: 52 },\n { h: 25, s: -119867, e: [ 1, 4, 5, 7, 8, 11, 12, 17 ], l: 52 },\n { h: 25, s: -119919, l: 52 },\n { h: 24, s: -119971, e: [ 2, 7, 8, 17 ], l: 52 },\n { h: 24, s: -120023, e: [ 2, 7, 13, 15, 16, 17 ], l: 52 },\n { h: 25, s: -120075, l: 52 },\n { h: 25, s: -120127, l: 52 },\n { h: 25, s: -120179, l: 52 },\n { h: 25, s: -120231, l: 52 },\n { h: 25, s: -120283, l: 52 },\n { h: 25, s: -120335, l: 52 },\n { h: 24, s: -119543, e: [ 17 ], l: 56 },\n { h: 24, s: -119601, e: [ 17 ], l: 58 },\n { h: 24, s: -119659, e: [ 17 ], l: 58 },\n { h: 24, s: -119717, e: [ 17 ], l: 58 },\n { h: 24, s: -119775, e: [ 17 ], l: 58 }\n];\nconst Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nconst Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nconst Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\n\nconst Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\n\n\nfunction flatten(values: Array>): Array {\n return values.reduce((accum, value) => {\n value.forEach((value) => { accum.push(value); });\n return accum;\n }, [ ]);\n}\n\nexport function _nameprepTableA1(codepoint: number): boolean {\n return !!matchMap(codepoint, Table_A_1_ranges);\n}\n\nexport function _nameprepTableB2(codepoint: number): Array {\n let range = matchMap(codepoint, Table_B_2_ranges);\n if (range) { return [ codepoint + range.s ]; }\n\n let codes = Table_B_2_lut_abs[codepoint];\n if (codes) { return codes; }\n\n let shift = Table_B_2_lut_rel[codepoint];\n if (shift) { return [ codepoint + shift[0] ]; }\n\n let complex = Table_B_2_complex[codepoint];\n if (complex) { return complex; }\n\n return null;\n}\n\nexport function _nameprepTableC(codepoint: number): boolean {\n return !!matchMap(codepoint, Table_C_ranges);\n}\n\nexport function nameprep(value: string): string {\n\n // This allows platforms with incomplete normalize to bypass\n // it for very basic names which the built-in toLowerCase\n // will certainly handle correctly\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) { return value.toLowerCase(); }\n\n // Get the code points (keeping the current normalization)\n let codes = toUtf8CodePoints(value);\n\n codes = flatten(codes.map((code) => {\n // Substitute Table B.1 (Maps to Nothing)\n if (Table_B_1_flags.indexOf(code) >= 0) { return [ ]; }\n if (code >= 0xfe00 && code <= 0xfe0f) { return [ ]; }\n\n // Substitute Table B.2 (Case Folding)\n let codesTableB2 = _nameprepTableB2(code);\n if (codesTableB2) { return codesTableB2; }\n\n // No Substitution\n return [ code ];\n }));\n\n // Normalize using form KC\n codes = toUtf8CodePoints(_toUtf8String(codes), UnicodeNormalizationForm.NFKC);\n\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n codes.forEach((code) => {\n if (_nameprepTableC(code)) {\n throw new Error(\"STRINGPREP_CONTAINS_PROHIBITED\");\n }\n });\n\n // Prohibit Unassigned Code Points (Table A.1)\n codes.forEach((code) => {\n if (_nameprepTableA1(code)) {\n throw new Error(\"STRINGPREP_CONTAINS_UNASSIGNED\");\n }\n });\n\n // IDNA extras\n let name = _toUtf8String(codes);\n\n // IDNA: 4.2.3.1\n if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n throw new Error(\"invalid hyphen\");\n }\n\n return name;\n}\n\n","\"use strict\";\n\nimport { formatBytes32String, parseBytes32String } from \"./bytes32\";\nimport { nameprep } from \"./idna\";\nimport { _toEscapedUtf8String, toUtf8Bytes, toUtf8CodePoints, toUtf8String, UnicodeNormalizationForm, Utf8ErrorFunc, Utf8ErrorFuncs, Utf8ErrorReason } from \"./utf8\";\n\nexport {\n _toEscapedUtf8String,\n toUtf8Bytes,\n toUtf8CodePoints,\n toUtf8String,\n\n Utf8ErrorFunc,\n Utf8ErrorFuncs,\n Utf8ErrorReason,\n\n UnicodeNormalizationForm,\n\n formatBytes32String,\n parseBytes32String,\n\n nameprep\n}\n","\"use strict\";\n\nimport { toUtf8Bytes, toUtf8String } from \"@ethersproject/strings\";\n\nimport { Reader, Writer } from \"./abstract-coder\";\nimport { DynamicBytesCoder } from \"./bytes\";\n\nexport class StringCoder extends DynamicBytesCoder {\n\n constructor(localName: string) {\n super(\"string\", localName);\n }\n\n defaultValue(): string {\n return \"\";\n }\n\n encode(writer: Writer, value: any): number {\n return super.encode(writer, toUtf8Bytes(value));\n }\n\n decode(reader: Reader): any {\n return toUtf8String(super.decode(reader));\n }\n}\n","\"use strict\";\n\nimport { Coder, Reader, Writer } from \"./abstract-coder\";\nimport { pack, unpack } from \"./array\";\n\nexport class TupleCoder extends Coder {\n readonly coders: Array;\n\n constructor(coders: Array, localName: string) {\n let dynamic = false;\n const types: Array = [];\n coders.forEach((coder) => {\n if (coder.dynamic) { dynamic = true; }\n types.push(coder.type);\n });\n const type = (\"tuple(\" + types.join(\",\") + \")\");\n\n super(\"tuple\", type, localName, dynamic);\n this.coders = coders;\n }\n\n defaultValue(): any {\n const values: any = [ ];\n this.coders.forEach((coder) => {\n values.push(coder.defaultValue());\n });\n\n // We only output named properties for uniquely named coders\n const uniqueNames = this.coders.reduce((accum, coder) => {\n const name = coder.localName;\n if (name) {\n if (!accum[name]) { accum[name] = 0; }\n accum[name]++;\n }\n return accum;\n }, <{ [ name: string ]: number }>{ });\n\n // Add named values\n this.coders.forEach((coder: Coder, index: number) => {\n let name = coder.localName;\n if (!name || uniqueNames[name] !== 1) { return; }\n\n if (name === \"length\") { name = \"_length\"; }\n\n if (values[name] != null) { return; }\n\n values[name] = values[index];\n });\n\n return Object.freeze(values);\n }\n\n encode(writer: Writer, value: Array | { [ name: string ]: any }): number {\n return pack(writer, this.coders, value);\n }\n\n decode(reader: Reader): any {\n return reader.coerce(this.name, unpack(reader, this.coders));\n }\n}\n\n","\"use strict\";\n\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n\nimport { arrayify, BytesLike } from \"@ethersproject/bytes\";\nimport { defineReadOnly } from \"@ethersproject/properties\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nimport { Coder, Reader, Result, Writer } from \"./coders/abstract-coder\";\nimport { AddressCoder } from \"./coders/address\";\nimport { ArrayCoder } from \"./coders/array\";\nimport { BooleanCoder } from \"./coders/boolean\";\nimport { BytesCoder } from \"./coders/bytes\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes\";\nimport { NullCoder } from \"./coders/null\";\nimport { NumberCoder } from \"./coders/number\";\nimport { StringCoder } from \"./coders/string\";\nimport { TupleCoder } from \"./coders/tuple\";\n\nimport { ParamType } from \"./fragments\";\n\n\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\n\n\nexport type CoerceFunc = (type: string, value: any) => any;\n\nexport class AbiCoder {\n readonly coerceFunc: CoerceFunc;\n\n constructor(coerceFunc?: CoerceFunc) {\n defineReadOnly(this, \"coerceFunc\", coerceFunc || null);\n }\n\n _getCoder(param: ParamType): Coder {\n\n switch (param.baseType) {\n case \"address\":\n return new AddressCoder(param.name);\n case \"bool\":\n return new BooleanCoder(param.name);\n case \"string\":\n return new StringCoder(param.name);\n case \"bytes\":\n return new BytesCoder(param.name);\n case \"array\":\n return new ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name);\n case \"tuple\":\n return new TupleCoder((param.components || []).map((component) => {\n return this._getCoder(component);\n }), param.name);\n case \"\":\n return new NullCoder(param.name);\n }\n\n // u?int[0-9]*\n let match = param.type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n logger.throwArgumentError(\"invalid \" + match[1] + \" bit length\", \"param\", param);\n }\n return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n }\n\n // bytes[0-9]+\n match = param.type.match(paramTypeBytes);\n if (match) {\n let size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n logger.throwArgumentError(\"invalid bytes length\", \"param\", param);\n }\n return new FixedBytesCoder(size, param.name);\n }\n\n return logger.throwArgumentError(\"invalid type\", \"type\", param.type);\n }\n\n _getWordSize(): number { return 32; }\n\n _getReader(data: Uint8Array, allowLoose?: boolean): Reader {\n return new Reader(data, this._getWordSize(), this.coerceFunc, allowLoose);\n }\n\n _getWriter(): Writer {\n return new Writer(this._getWordSize());\n }\n\n getDefaultValue(types: ReadonlyArray): Result {\n const coders: Array = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.defaultValue();\n }\n\n encode(types: ReadonlyArray, values: ReadonlyArray): string {\n if (types.length !== values.length) {\n logger.throwError(\"types/values length mismatch\", Logger.errors.INVALID_ARGUMENT, {\n count: { types: types.length, values: values.length },\n value: { types: types, values: values }\n });\n }\n\n const coders = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = (new TupleCoder(coders, \"_\"));\n\n const writer = this._getWriter();\n coder.encode(writer, values);\n return writer.data;\n }\n\n decode(types: ReadonlyArray, data: BytesLike, loose?: boolean): Result {\n const coders: Array = types.map((type) => this._getCoder(ParamType.from(type)));\n const coder = new TupleCoder(coders, \"_\");\n return coder.decode(this._getReader(arrayify(data), loose));\n }\n}\n\nexport const defaultAbiCoder: AbiCoder = new AbiCoder();\n\n","import { keccak256 } from \"@ethersproject/keccak256\";\nimport { toUtf8Bytes } from \"@ethersproject/strings\";\n\nexport function id(text: string): string {\n return keccak256(toUtf8Bytes(text));\n}\n","\"use strict\";\n\nimport { id } from \"./id\";\nimport { dnsEncode, isValidName, namehash } from \"./namehash\";\nimport { hashMessage, messagePrefix } from \"./message\";\n\nimport { ensNormalize } from \"./namehash\";\n\nimport { TypedDataEncoder as _TypedDataEncoder } from \"./typed-data\";\n\nexport {\n id,\n\n dnsEncode,\n namehash,\n isValidName,\n\n ensNormalize,\n\n messagePrefix,\n hashMessage,\n\n _TypedDataEncoder,\n}\n","\"use strict\";\n\nimport { getAddress } from \"@ethersproject/address\";\nimport { BigNumber, BigNumberish } from \"@ethersproject/bignumber\";\nimport { arrayify, BytesLike, concat, hexDataSlice, hexlify, hexZeroPad, isHexString } from \"@ethersproject/bytes\";\nimport { id } from \"@ethersproject/hash\";\nimport { keccak256 } from \"@ethersproject/keccak256\"\nimport { defineReadOnly, Description, getStatic } from \"@ethersproject/properties\";\n\nimport { AbiCoder, defaultAbiCoder } from \"./abi-coder\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder\";\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatTypes, Fragment, FunctionFragment, JsonFragment, ParamType } from \"./fragments\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nexport { checkResultErrors, Result };\n\nexport class LogDescription extends Description {\n readonly eventFragment: EventFragment;\n readonly name: string;\n readonly signature: string;\n readonly topic: string;\n readonly args: Result\n}\n\nexport class TransactionDescription extends Description {\n readonly functionFragment: FunctionFragment;\n readonly name: string;\n readonly args: Result;\n readonly signature: string;\n readonly sighash: string;\n readonly value: BigNumber;\n}\n\nexport class ErrorDescription extends Description {\n readonly errorFragment: ErrorFragment;\n readonly name: string;\n readonly args: Result;\n readonly signature: string;\n readonly sighash: string;\n}\n\nexport class Indexed extends Description {\n readonly hash: string;\n readonly _isIndexed: boolean;\n\n static isIndexed(value: any): value is Indexed {\n return !!(value && value._isIndexed);\n }\n}\n\nconst BuiltinErrors: Record, name: string, reason?: boolean }> = {\n \"0x08c379a0\": { signature: \"Error(string)\", name: \"Error\", inputs: [ \"string\" ], reason: true },\n \"0x4e487b71\": { signature: \"Panic(uint256)\", name: \"Panic\", inputs: [ \"uint256\" ] }\n}\n\nfunction wrapAccessError(property: string, error: Error): Error {\n const wrap = new Error(`deferred error during ABI decoding triggered accessing ${ property }`);\n (wrap).error = error;\n return wrap;\n}\n\n/*\nfunction checkNames(fragment: Fragment, type: \"input\" | \"output\", params: Array): void {\n params.reduce((accum, param) => {\n if (param.name) {\n if (accum[param.name]) {\n logger.throwArgumentError(`duplicate ${ type } parameter ${ JSON.stringify(param.name) } in ${ fragment.format(\"full\") }`, \"fragment\", fragment);\n }\n accum[param.name] = true;\n }\n return accum;\n }, <{ [ name: string ]: boolean }>{ });\n}\n*/\nexport class Interface {\n readonly fragments: ReadonlyArray;\n\n readonly errors: { [ name: string ]: ErrorFragment };\n readonly events: { [ name: string ]: EventFragment };\n readonly functions: { [ name: string ]: FunctionFragment };\n readonly structs: { [ name: string ]: any };\n\n readonly deploy: ConstructorFragment;\n\n readonly _abiCoder: AbiCoder;\n\n readonly _isInterface: boolean;\n\n constructor(fragments: string | ReadonlyArray) {\n let abi: ReadonlyArray = [ ];\n if (typeof(fragments) === \"string\") {\n abi = JSON.parse(fragments);\n } else {\n abi = fragments;\n }\n\n defineReadOnly(this, \"fragments\", abi.map((fragment) => {\n return Fragment.from(fragment);\n }).filter((fragment) => (fragment != null)));\n\n defineReadOnly(this, \"_abiCoder\", getStatic<() => AbiCoder>(new.target, \"getAbiCoder\")());\n\n defineReadOnly(this, \"functions\", { });\n defineReadOnly(this, \"errors\", { });\n defineReadOnly(this, \"events\", { });\n defineReadOnly(this, \"structs\", { });\n\n // Add all fragments by their signature\n this.fragments.forEach((fragment) => {\n let bucket: { [ name: string ]: Fragment } = null;\n switch (fragment.type) {\n case \"constructor\":\n if (this.deploy) {\n logger.warn(\"duplicate definition - constructor\");\n return;\n }\n //checkNames(fragment, \"input\", fragment.inputs);\n defineReadOnly(this, \"deploy\", fragment);\n return;\n case \"function\":\n //checkNames(fragment, \"input\", fragment.inputs);\n //checkNames(fragment, \"output\", (fragment).outputs);\n bucket = this.functions;\n break;\n case \"event\":\n //checkNames(fragment, \"input\", fragment.inputs);\n bucket = this.events;\n break;\n case \"error\":\n bucket = this.errors;\n break;\n default:\n return;\n }\n\n let signature = fragment.format();\n if (bucket[signature]) {\n logger.warn(\"duplicate definition - \" + signature);\n return;\n }\n\n bucket[signature] = fragment;\n });\n\n // If we do not have a constructor add a default\n if (!this.deploy) {\n defineReadOnly(this, \"deploy\", ConstructorFragment.from({\n payable: false,\n type: \"constructor\"\n }));\n }\n\n defineReadOnly(this, \"_isInterface\", true);\n }\n\n format(format?: string): string | Array {\n if (!format) { format = FormatTypes.full; }\n if (format === FormatTypes.sighash) {\n logger.throwArgumentError(\"interface does not support formatting sighash\", \"format\", format);\n }\n\n const abi = this.fragments.map((fragment) => fragment.format(format));\n\n // We need to re-bundle the JSON fragments a bit\n if (format === FormatTypes.json) {\n return JSON.stringify(abi.map((j) => JSON.parse(j)));\n }\n\n return abi;\n }\n\n // Sub-classes can override these to handle other blockchains\n static getAbiCoder(): AbiCoder {\n return defaultAbiCoder;\n }\n\n static getAddress(address: string): string {\n return getAddress(address);\n }\n\n static getSighash(fragment: ErrorFragment | FunctionFragment): string {\n return hexDataSlice(id(fragment.format()), 0, 4);\n }\n\n static getEventTopic(eventFragment: EventFragment): string {\n return id(eventFragment.format());\n }\n\n // Find a function definition by any means necessary (unless it is ambiguous)\n getFunction(nameOrSignatureOrSighash: string): FunctionFragment {\n if (isHexString(nameOrSignatureOrSighash)) {\n for (const name in this.functions) {\n if (nameOrSignatureOrSighash === this.getSighash(name)) {\n return this.functions[name];\n }\n }\n logger.throwArgumentError(\"no matching function\", \"sighash\", nameOrSignatureOrSighash);\n }\n\n // It is a bare name, look up the function (will return null if ambiguous)\n if (nameOrSignatureOrSighash.indexOf(\"(\") === -1) {\n const name = nameOrSignatureOrSighash.trim();\n const matching = Object.keys(this.functions).filter((f) => (f.split(\"(\"/* fix:) */)[0] === name));\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching function\", \"name\", name);\n } else if (matching.length > 1) {\n logger.throwArgumentError(\"multiple matching functions\", \"name\", name);\n }\n\n return this.functions[matching[0]];\n }\n\n // Normalize the signature and lookup the function\n const result = this.functions[FunctionFragment.fromString(nameOrSignatureOrSighash).format()];\n if (!result) {\n logger.throwArgumentError(\"no matching function\", \"signature\", nameOrSignatureOrSighash);\n }\n return result;\n }\n\n // Find an event definition by any means necessary (unless it is ambiguous)\n getEvent(nameOrSignatureOrTopic: string): EventFragment {\n if (isHexString(nameOrSignatureOrTopic)) {\n const topichash = nameOrSignatureOrTopic.toLowerCase();\n for (const name in this.events) {\n if (topichash === this.getEventTopic(name)) {\n return this.events[name];\n }\n }\n logger.throwArgumentError(\"no matching event\", \"topichash\", topichash);\n }\n\n // It is a bare name, look up the function (will return null if ambiguous)\n if (nameOrSignatureOrTopic.indexOf(\"(\") === -1) {\n const name = nameOrSignatureOrTopic.trim();\n const matching = Object.keys(this.events).filter((f) => (f.split(\"(\"/* fix:) */)[0] === name));\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching event\", \"name\", name);\n } else if (matching.length > 1) {\n logger.throwArgumentError(\"multiple matching events\", \"name\", name);\n }\n\n return this.events[matching[0]];\n }\n\n // Normalize the signature and lookup the function\n const result = this.events[EventFragment.fromString(nameOrSignatureOrTopic).format()];\n if (!result) {\n logger.throwArgumentError(\"no matching event\", \"signature\", nameOrSignatureOrTopic);\n }\n return result;\n }\n\n // Find a function definition by any means necessary (unless it is ambiguous)\n getError(nameOrSignatureOrSighash: string): ErrorFragment {\n if (isHexString(nameOrSignatureOrSighash)) {\n const getSighash = getStatic<(f: ErrorFragment | FunctionFragment) => string>(this.constructor, \"getSighash\");\n for (const name in this.errors) {\n const error = this.errors[name];\n if (nameOrSignatureOrSighash === getSighash(error)) {\n return this.errors[name];\n }\n }\n logger.throwArgumentError(\"no matching error\", \"sighash\", nameOrSignatureOrSighash);\n }\n\n // It is a bare name, look up the function (will return null if ambiguous)\n if (nameOrSignatureOrSighash.indexOf(\"(\") === -1) {\n const name = nameOrSignatureOrSighash.trim();\n const matching = Object.keys(this.errors).filter((f) => (f.split(\"(\"/* fix:) */)[0] === name));\n if (matching.length === 0) {\n logger.throwArgumentError(\"no matching error\", \"name\", name);\n } else if (matching.length > 1) {\n logger.throwArgumentError(\"multiple matching errors\", \"name\", name);\n }\n\n return this.errors[matching[0]];\n }\n\n // Normalize the signature and lookup the function\n const result = this.errors[FunctionFragment.fromString(nameOrSignatureOrSighash).format()];\n if (!result) {\n logger.throwArgumentError(\"no matching error\", \"signature\", nameOrSignatureOrSighash);\n }\n return result;\n }\n\n // Get the sighash (the bytes4 selector) used by Solidity to identify a function\n getSighash(fragment: ErrorFragment | FunctionFragment | string): string {\n if (typeof(fragment) === \"string\") {\n try {\n fragment = this.getFunction(fragment);\n } catch (error) {\n try {\n fragment = this.getError(fragment);\n } catch (_) {\n throw error;\n }\n }\n }\n\n return getStatic<(f: ErrorFragment | FunctionFragment) => string>(this.constructor, \"getSighash\")(fragment);\n }\n\n // Get the topic (the bytes32 hash) used by Solidity to identify an event\n getEventTopic(eventFragment: EventFragment | string): string {\n if (typeof(eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n\n return getStatic<(e: EventFragment) => string>(this.constructor, \"getEventTopic\")(eventFragment);\n }\n\n\n _decodeParams(params: ReadonlyArray, data: BytesLike): Result {\n return this._abiCoder.decode(params, data)\n }\n\n _encodeParams(params: ReadonlyArray, values: ReadonlyArray): string {\n return this._abiCoder.encode(params, values)\n }\n\n encodeDeploy(values?: ReadonlyArray): string {\n return this._encodeParams(this.deploy.inputs, values || [ ]);\n }\n\n decodeErrorResult(fragment: ErrorFragment | string, data: BytesLike): Result {\n if (typeof(fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n\n const bytes = arrayify(data);\n\n if (hexlify(bytes.slice(0, 4)) !== this.getSighash(fragment)) {\n logger.throwArgumentError(`data signature does not match error ${ fragment.name }.`, \"data\", hexlify(bytes));\n }\n\n return this._decodeParams(fragment.inputs, bytes.slice(4));\n }\n\n encodeErrorResult(fragment: ErrorFragment | string, values?: ReadonlyArray): string {\n if (typeof(fragment) === \"string\") {\n fragment = this.getError(fragment);\n }\n\n return hexlify(concat([\n this.getSighash(fragment),\n this._encodeParams(fragment.inputs, values || [ ])\n ]));\n }\n\n // Decode the data for a function call (e.g. tx.data)\n decodeFunctionData(functionFragment: FunctionFragment | string, data: BytesLike): Result {\n if (typeof(functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n\n const bytes = arrayify(data);\n\n if (hexlify(bytes.slice(0, 4)) !== this.getSighash(functionFragment)) {\n logger.throwArgumentError(`data signature does not match function ${ functionFragment.name }.`, \"data\", hexlify(bytes));\n }\n\n return this._decodeParams(functionFragment.inputs, bytes.slice(4));\n }\n\n // Encode the data for a function call (e.g. tx.data)\n encodeFunctionData(functionFragment: FunctionFragment | string, values?: ReadonlyArray): string {\n if (typeof(functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n\n return hexlify(concat([\n this.getSighash(functionFragment),\n this._encodeParams(functionFragment.inputs, values || [ ])\n ]));\n }\n\n // Decode the result from a function call (e.g. from eth_call)\n decodeFunctionResult(functionFragment: FunctionFragment | string, data: BytesLike): Result {\n if (typeof(functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n\n let bytes = arrayify(data);\n\n let reason: string = null;\n let message = \"\";\n let errorArgs: Result = null;\n let errorName: string = null;\n let errorSignature: string = null;\n switch (bytes.length % this._abiCoder._getWordSize()) {\n case 0:\n try {\n return this._abiCoder.decode(functionFragment.outputs, bytes);\n } catch (error) { }\n break;\n\n case 4: {\n const selector = hexlify(bytes.slice(0, 4));\n const builtin = BuiltinErrors[selector];\n if (builtin) {\n errorArgs = this._abiCoder.decode(builtin.inputs, bytes.slice(4));\n errorName = builtin.name;\n errorSignature = builtin.signature;\n if (builtin.reason) { reason = errorArgs[0]; }\n if (errorName === \"Error\") {\n message = `; VM Exception while processing transaction: reverted with reason string ${ JSON.stringify(errorArgs[0]) }`;\n } else if (errorName === \"Panic\") {\n message = `; VM Exception while processing transaction: reverted with panic code ${ errorArgs[0] }`;\n }\n } else {\n try {\n const error = this.getError(selector);\n errorArgs = this._abiCoder.decode(error.inputs, bytes.slice(4));\n errorName = error.name;\n errorSignature = error.format();\n } catch (error) { }\n }\n break;\n }\n }\n\n return logger.throwError(\"call revert exception\" + message, Logger.errors.CALL_EXCEPTION, {\n method: functionFragment.format(),\n data: hexlify(data), errorArgs, errorName, errorSignature, reason\n });\n }\n\n // Encode the result for a function call (e.g. for eth_call)\n encodeFunctionResult(functionFragment: FunctionFragment | string, values?: ReadonlyArray): string {\n if (typeof(functionFragment) === \"string\") {\n functionFragment = this.getFunction(functionFragment);\n }\n\n return hexlify(this._abiCoder.encode(functionFragment.outputs, values || [ ]));\n }\n\n // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n encodeFilterTopics(eventFragment: EventFragment | string, values: ReadonlyArray): Array> {\n if (typeof(eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n\n if (values.length > eventFragment.inputs.length) {\n logger.throwError(\"too many arguments for \" + eventFragment.format(), Logger.errors.UNEXPECTED_ARGUMENT, {\n argument: \"values\",\n value: values\n })\n }\n\n let topics: Array> = [];\n if (!eventFragment.anonymous) { topics.push(this.getEventTopic(eventFragment)); }\n\n const encodeTopic = (param: ParamType, value: any): string => {\n if (param.type === \"string\") {\n return id(value);\n } else if (param.type === \"bytes\") {\n return keccak256(hexlify(value));\n }\n\n if (param.type === \"bool\" && typeof(value) === \"boolean\") {\n value = (value ? \"0x01\": \"0x00\");\n }\n\n if (param.type.match(/^u?int/)) {\n value = BigNumber.from(value).toHexString();\n }\n\n // Check addresses are valid\n if (param.type === \"address\") { this._abiCoder.encode( [ \"address\" ], [ value ]); }\n return hexZeroPad(hexlify(value), 32);\n };\n\n values.forEach((value, index) => {\n\n let param = (eventFragment).inputs[index];\n\n if (!param.indexed) {\n if (value != null) {\n logger.throwArgumentError(\"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n }\n return;\n }\n\n if (value == null) {\n topics.push(null);\n } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n } else if (Array.isArray(value)) {\n topics.push(value.map((value) => encodeTopic(param, value)));\n } else {\n topics.push(encodeTopic(param, value));\n }\n });\n\n // Trim off trailing nulls\n while (topics.length && topics[topics.length - 1] === null) {\n topics.pop();\n }\n\n return topics;\n }\n\n encodeEventLog(eventFragment: EventFragment | string, values: ReadonlyArray): { data: string, topics: Array } {\n if (typeof(eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n\n const topics: Array = [ ];\n\n const dataTypes: Array = [ ];\n const dataValues: Array = [ ];\n\n if (!eventFragment.anonymous) {\n topics.push(this.getEventTopic(eventFragment));\n }\n\n if (values.length !== eventFragment.inputs.length) {\n logger.throwArgumentError(\"event arguments/values mismatch\", \"values\", values);\n }\n\n eventFragment.inputs.forEach((param, index) => {\n const value = values[index];\n if (param.indexed) {\n if (param.type === \"string\") {\n topics.push(id(value))\n } else if (param.type === \"bytes\") {\n topics.push(keccak256(value))\n } else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n // @TODO\n throw new Error(\"not implemented\");\n } else {\n topics.push(this._abiCoder.encode([ param.type] , [ value ]));\n }\n } else {\n dataTypes.push(param);\n dataValues.push(value);\n }\n });\n\n return {\n data: this._abiCoder.encode(dataTypes , dataValues),\n topics: topics\n };\n }\n\n // Decode a filter for the event and the search criteria\n decodeEventLog(eventFragment: EventFragment | string, data: BytesLike, topics?: ReadonlyArray): Result {\n if (typeof(eventFragment) === \"string\") {\n eventFragment = this.getEvent(eventFragment);\n }\n\n if (topics != null && !eventFragment.anonymous) {\n let topicHash = this.getEventTopic(eventFragment);\n if (!isHexString(topics[0], 32) || topics[0].toLowerCase() !== topicHash) {\n logger.throwError(\"fragment/topic mismatch\", Logger.errors.INVALID_ARGUMENT, { argument: \"topics[0]\", expected: topicHash, value: topics[0] });\n }\n topics = topics.slice(1);\n }\n\n let indexed: Array = [];\n let nonIndexed: Array = [];\n let dynamic: Array = [];\n\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n indexed.push(ParamType.fromObject({ type: \"bytes32\", name: param.name }));\n dynamic.push(true);\n } else {\n indexed.push(param);\n dynamic.push(false);\n }\n } else {\n nonIndexed.push(param);\n dynamic.push(false);\n }\n });\n\n let resultIndexed = (topics != null) ? this._abiCoder.decode(indexed, concat(topics)): null;\n let resultNonIndexed = this._abiCoder.decode(nonIndexed, data, true);\n\n let result: (Array & { [ key: string ]: any }) = [ ];\n let nonIndexedIndex = 0, indexedIndex = 0;\n eventFragment.inputs.forEach((param, index) => {\n if (param.indexed) {\n if (resultIndexed == null) {\n result[index] = new Indexed({ _isIndexed: true, hash: null });\n\n } else if (dynamic[index]) {\n result[index] = new Indexed({ _isIndexed: true, hash: resultIndexed[indexedIndex++] });\n\n } else {\n try {\n result[index] = resultIndexed[indexedIndex++];\n } catch (error) {\n result[index] = error;\n }\n }\n } else {\n try {\n result[index] = resultNonIndexed[nonIndexedIndex++];\n } catch (error) {\n result[index] = error;\n }\n }\n\n // Add the keyword argument if named and safe\n if (param.name && result[param.name] == null) {\n const value = result[index];\n\n // Make error named values throw on access\n if (value instanceof Error) {\n Object.defineProperty(result, param.name, {\n enumerable: true,\n get: () => { throw wrapAccessError(`property ${ JSON.stringify(param.name) }`, value); }\n });\n } else {\n result[param.name] = value;\n }\n }\n });\n\n // Make all error indexed values throw on access\n for (let i = 0; i < result.length; i++) {\n const value = result[i];\n if (value instanceof Error) {\n Object.defineProperty(result, i, {\n enumerable: true,\n get: () => { throw wrapAccessError(`index ${ i }`, value); }\n });\n }\n }\n\n return Object.freeze(result);\n }\n\n // Given a transaction, find the matching function fragment (if any) and\n // determine all its properties and call parameters\n parseTransaction(tx: { data: string, value?: BigNumberish }): TransactionDescription {\n let fragment = this.getFunction(tx.data.substring(0, 10).toLowerCase())\n\n if (!fragment) { return null; }\n\n return new TransactionDescription({\n args: this._abiCoder.decode(fragment.inputs, \"0x\" + tx.data.substring(10)),\n functionFragment: fragment,\n name: fragment.name,\n signature: fragment.format(),\n sighash: this.getSighash(fragment),\n value: BigNumber.from(tx.value || \"0\"),\n });\n }\n\n // @TODO\n //parseCallResult(data: BytesLike): ??\n\n // Given an event log, find the matching event fragment (if any) and\n // determine all its properties and values\n parseLog(log: { topics: Array, data: string}): LogDescription {\n let fragment = this.getEvent(log.topics[0]);\n\n if (!fragment || fragment.anonymous) { return null; }\n\n // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n // Probably not, because just because it is the only event in the ABI does\n // not mean we have the full ABI; maybe just a fragment?\n\n\n return new LogDescription({\n eventFragment: fragment,\n name: fragment.name,\n signature: fragment.format(),\n topic: this.getEventTopic(fragment),\n args: this.decodeEventLog(fragment, log.data, log.topics)\n });\n }\n\n parseError(data: BytesLike): ErrorDescription {\n const hexData = hexlify(data);\n let fragment = this.getError(hexData.substring(0, 10).toLowerCase())\n\n if (!fragment) { return null; }\n\n return new ErrorDescription({\n args: this._abiCoder.decode(fragment.inputs, \"0x\" + hexData.substring(10)),\n errorFragment: fragment,\n name: fragment.name,\n signature: fragment.format(),\n sighash: this.getSighash(fragment),\n });\n }\n\n\n /*\n static from(value: Array | string | Interface) {\n if (Interface.isInterface(value)) {\n return value;\n }\n if (typeof(value) === \"string\") {\n return new Interface(JSON.parse(value));\n }\n return new Interface(value);\n }\n */\n\n static isInterface(value: any): value is Interface {\n return !!(value && value._isInterface);\n }\n}\n\n","\"use strict\";\n\nimport { ConstructorFragment, ErrorFragment, EventFragment, FormatTypes, Fragment, FunctionFragment, JsonFragment, JsonFragmentType, ParamType } from \"./fragments\";\nimport { AbiCoder, CoerceFunc, defaultAbiCoder } from \"./abi-coder\";\nimport { checkResultErrors, Indexed, Interface, LogDescription, Result, TransactionDescription } from \"./interface\";\n\nexport {\n ConstructorFragment,\n ErrorFragment,\n EventFragment,\n Fragment,\n FunctionFragment,\n ParamType,\n FormatTypes,\n\n AbiCoder,\n defaultAbiCoder,\n\n Interface,\n Indexed,\n\n /////////////////////////\n // Types\n\n CoerceFunc,\n JsonFragment,\n JsonFragmentType,\n\n Result,\n checkResultErrors,\n\n LogDescription,\n TransactionDescription\n};\n","import {\n JsonFragment,\n ParamType,\n Result,\n defaultAbiCoder,\n} from '@ethersproject/abi';\nimport { keccak256 } from '@ethersproject/keccak256';\nimport { toUtf8Bytes } from '@ethersproject/strings';\n\ninterface FunctionData {\n name: string;\n inputs: ParamType[];\n values: ValueMap;\n}\n\ninterface FunctionOutputData {\n name: string;\n outputs: ParamType[];\n values: ValueMap;\n}\n\ninterface Constructor {\n inputs: ParamType[];\n values: ValueMap;\n}\n\ninterface Event {\n name: string;\n inputs: ParamType[];\n values: ValueMap;\n}\n\ninterface EventEncoding {\n topics: string[];\n data: string;\n}\n\ntype Values = unknown[];\ntype ValueMap = Record;\n\nclass Coder {\n private abi: JsonFragment[];\n\n constructor(abi: JsonFragment[]) {\n this.abi = abi;\n }\n\n getFunctionSelector(name: string): string {\n const func = this.getFunctionByName(name);\n const jsonInputs = func?.inputs;\n if (!jsonInputs) {\n throw Error;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const signature = Coder.getSignature(name, inputs);\n const hash = sha3(signature);\n return hash.substring(0, 10);\n }\n\n getEventTopic(name: string): string {\n const event = this.getEventByName(name);\n const jsonInputs = event?.inputs;\n if (!jsonInputs) {\n throw Error;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const signature = Coder.getSignature(name, inputs);\n return sha3(signature);\n }\n\n decodeConstructor(data: string): Constructor {\n const constructor = this.getConstructor();\n const jsonInputs = constructor?.inputs;\n if (!jsonInputs) {\n throw Error;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const result = defaultAbiCoder.decode(inputs, data);\n const values = toValueMap(result, inputs);\n return {\n inputs,\n values,\n };\n }\n\n decodeEvent(topics: string[], data: string): Event {\n const event = this.getEventByTopic(topics[0]);\n const [, ...dataTopics] = topics;\n const jsonInputs = event?.inputs;\n if (!jsonInputs) {\n throw Error;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n // Decode topics\n const topicInputs = inputs.filter((input) => input.indexed);\n const topicResult = topicInputs.map((input, index) => {\n const topic = dataTopics[index];\n const params = defaultAbiCoder.decode([input], topic);\n const [param] = params;\n return param;\n });\n // Decode data\n const dataInputs = inputs.filter((input) => !input.indexed);\n const dataResult = defaultAbiCoder.decode(dataInputs, data);\n // Concat\n if (!event.name) {\n throw Error;\n }\n let topicIndex = 0;\n let dataIndex = 0;\n const result: Result = [];\n for (const input of inputs) {\n if (input.indexed) {\n result.push(topicResult[topicIndex]);\n topicIndex++;\n } else {\n result.push(dataResult[dataIndex]);\n dataIndex++;\n }\n }\n const values = toValueMap(result, inputs);\n return {\n name: event.name,\n inputs,\n values,\n };\n }\n\n decodeFunction(data: string): FunctionData {\n const selector = data.substring(0, 10);\n const func = this.getFunctionBySelector(selector);\n // Decode calldata using function inputs\n const jsonInputs = func?.inputs;\n if (!jsonInputs) {\n throw Error;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const calldata = `0x${data.substring(10)}`;\n const result = defaultAbiCoder.decode(inputs, calldata);\n const values = toValueMap(result, inputs);\n\n if (!func.name) {\n throw Error;\n }\n return {\n name: func.name,\n inputs,\n values,\n };\n }\n\n decodeFunctionOutput(name: string, data: string): FunctionOutputData {\n const func = this.getFunctionByName(name);\n const jsonOutputs = func?.outputs;\n if (!jsonOutputs) {\n throw Error;\n }\n const outputs = jsonOutputs.map((output) => ParamType.fromObject(output));\n const result = defaultAbiCoder.decode(outputs, data);\n const values = toValueMap(result, outputs);\n return {\n name,\n outputs,\n values,\n };\n }\n\n encodeConstructor(valueMap: ValueMap): string {\n const constructor = this.getConstructor();\n const jsonInputs = constructor?.inputs;\n if (!jsonInputs) {\n throw Error;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const values = toValues(valueMap, inputs);\n return defaultAbiCoder.encode(inputs, values);\n }\n\n encodeEvent(name: string, values: ValueMap): EventEncoding {\n const event = this.getEventByName(name);\n const jsonInputs = event?.inputs;\n if (!jsonInputs) {\n throw Error;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const eventSignature = Coder.getSignature(name, inputs);\n const eventTopic = sha3(eventSignature);\n // Group params by type\n const topicResult: Result = [];\n const dataResult: Values = [];\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i];\n const value = values[input.name];\n if (input.indexed) {\n topicResult.push(value);\n } else {\n dataResult.push(value);\n }\n }\n // Encode topic params\n const topicInputs = inputs.filter((input) => input.indexed);\n const dataTopics = topicInputs.map((input, index) => {\n return defaultAbiCoder.encode([input], [topicResult[index]]);\n });\n const topics = [eventTopic, ...dataTopics];\n // Encode data params\n const dataInputs = inputs.filter((input) => !input.indexed);\n const data = defaultAbiCoder.encode(dataInputs, dataResult);\n\n return {\n topics,\n data,\n };\n }\n\n encodeFunction(name: string, valueMap: ValueMap): string {\n const func = this.getFunctionByName(name);\n const jsonInputs = func?.inputs;\n if (!jsonInputs) {\n throw Error;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const signature = Coder.getSignature(name, inputs);\n const selector = sha3(signature).substring(2, 10);\n const values = toValues(valueMap, inputs);\n const argumentString = defaultAbiCoder.encode(inputs, values);\n const argumentData = argumentString.substring(2);\n const inputData = `0x${selector}${argumentData}`;\n return inputData;\n }\n\n encodeFunctionOutput(name: string, valueMap: ValueMap): string {\n const func = this.getFunctionByName(name);\n const jsonOutputs = func.outputs;\n if (!jsonOutputs) {\n throw Error;\n }\n const outputs = jsonOutputs.map((output) => ParamType.fromObject(output));\n const values = toValues(valueMap, outputs);\n return defaultAbiCoder.encode(outputs, values);\n }\n\n private getConstructor(): JsonFragment {\n const constructor = this.abi.find((item) => item.type === 'constructor');\n if (!constructor) {\n throw Error;\n }\n return constructor;\n }\n\n private getFunctionByName(name: string): JsonFragment {\n const func = this.abi.find(\n (item) => item.type === 'function' && item.name === name,\n );\n if (!func) {\n throw Error;\n }\n return func;\n }\n\n private getFunctionBySelector(selector: string): JsonFragment {\n const functions = this.abi.filter(\n (item) => item.type === 'function' || item.type === 'error',\n );\n const func = functions.find((func) => {\n const name = func.name;\n const jsonInputs = func.inputs;\n if (!name || !jsonInputs) {\n return false;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const signature = Coder.getSignature(name, inputs);\n const hash = sha3(signature);\n const funcSelector = hash.substring(0, 10);\n return funcSelector === selector;\n });\n if (!func) {\n throw Error;\n }\n return func;\n }\n\n private getEventByName(name: string): JsonFragment {\n const event = this.abi.find(\n (item) => item.type === 'event' && item.name === name,\n );\n if (!event) {\n throw Error;\n }\n return event;\n }\n\n private getEventByTopic(topic: string): JsonFragment {\n const events = this.abi.filter((item) => item.type === 'event');\n const event = events.find((event) => {\n const name = event.name;\n const jsonInputs = event.inputs;\n if (!name || !jsonInputs) {\n return false;\n }\n const inputs = jsonInputs.map((input) => ParamType.fromObject(input));\n const signature = Coder.getSignature(name, inputs);\n const eventTopic = sha3(signature);\n return eventTopic === topic;\n });\n if (!event) {\n throw Error;\n }\n return event;\n }\n\n private static getSignature(name: string, inputs: ParamType[]): string {\n const types: string[] = [];\n for (const input of inputs) {\n if (input.type.startsWith('tuple')) {\n const tupleString = Coder.getSignature('', input.components);\n const arrayArityString = input.type.substring('tuple'.length);\n const type = `${tupleString}${arrayArityString}`;\n types.push(type);\n } else {\n types.push(input.type);\n }\n }\n const typeString = types.join(',');\n const functionSignature = `${name}(${typeString})`;\n return functionSignature;\n }\n}\n\nfunction sha3(input: string): string {\n return keccak256(toUtf8Bytes(input));\n}\n\nfunction toValueMap(values: Result, inputs: ParamType[]): ValueMap {\n return Object.fromEntries(\n values.map((value, index) => {\n const input: ParamType = inputs[index];\n return [input.name, value];\n }),\n );\n}\n\nfunction toValues(valueMap: ValueMap, inputs: ParamType[]): Values {\n return inputs.map((input) => {\n return valueMap[input.name];\n });\n}\n\nexport {\n Coder,\n Constructor,\n Event,\n EventEncoding,\n FunctionData,\n FunctionOutputData,\n ValueMap,\n};\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","import {Ethereum} from './ethereum'\nimport {Polkadot} from './polkadot'\n\nconst ExtensionTools = {\n Ethereum,\n Polkadot,\n}\n\nexport {ExtensionTools, Ethereum, Polkadot}\n\nexport default ExtensionTools\n\n// =========================================\n// types\n// =========================================\n\nexport type {\n AddEthereumChainParameter,\n UNIQUE_CHAIN,\n UpdateReason,\n IEthereumAccountResult,\n} from './ethereum'\n\nexport type {\n IPolkadotExtensionWallet,\n IPolkadotExtensionWalletInfo,\n IPolkadotExtensionAccount,\n IPolkadotExtensionGenericInfo,\n IPolkadotExtensionLoadWalletsResult,\n IPolkadotExtensionListWalletsResult,\n IPolkadotExtensionLoadWalletByNameResult,\n SignerPayloadJSON,\n SignerPayloadRaw,\n SignerPayloadRawWithAddressAndTypeOptional,\n SignerPayloadJSONWithAddressOptional,\n SignerResult,\n} from './polkadot'\n","export const documentReadyPromiseAndWindowIsOk = (): Promise => {\n if (typeof window === 'undefined') {\n return Promise.resolve(false)\n } else if(window.document.readyState === 'complete') {\n return Promise.resolve(true)\n } else {\n return new Promise(resolve => window.addEventListener('load', () => resolve(true), {once: true}));\n }\n}\n","import {documentReadyPromiseAndWindowIsOk} from './utils'\n\nexport const windowIsOkSync = (): boolean => {\n return typeof window !== 'undefined' && !!(window as any).ethereum;\n}\n\ntype IEthereumExtensionError = Error & {\n extensionNotFound: boolean\n userRejected: boolean\n}\n\nexport interface AddEthereumChainParameter {\n chainId: string // A 0x-prefixed hexadecimal string\n chainName: string\n nativeCurrency: {\n name: string\n symbol: string // 2-6 characters long\n decimals: 18\n }\n rpcUrls: string[]\n blockExplorerUrls?: string[]\n iconUrls?: string[] // Currently ignored\n}\n\ntype UNIQUE_CHAIN = 'unique' | 'quartz' | 'opal' | 'sapphire'\nconst chainNameToChainId: Record = {\n unique: 8880,\n quartz: 8881,\n opal: 8882,\n sapphire: 8883\n}\nconst chainIdToChainName: Record = {\n 8880: 'unique',\n 8881: 'quartz',\n 8882: 'opal',\n 8883: 'sapphire'\n}\n\nconst isUniqueChainFactory = (chainName: UNIQUE_CHAIN) => (): boolean => {\n if (!windowIsOkSync()) {\n return false\n }\n const chainId = parseInt((window as any).ethereum.chainId, 16)\n return chainId === chainNameToChainId[chainName]\n}\nconst currentChainIs: Record boolean> & { anyUniqueChain: (chainId: string | number) => boolean } = {\n unique: isUniqueChainFactory('unique'),\n quartz: isUniqueChainFactory('quartz'),\n opal: isUniqueChainFactory('opal'),\n sapphire: isUniqueChainFactory('sapphire'),\n anyUniqueChain: (chainId: string | number | null | undefined): boolean => {\n if (!chainId) return false\n\n const chainName: UNIQUE_CHAIN | undefined =\n chainIdToChainName[typeof chainId === \"number\" ? chainId : parseInt(chainId, 16)]\n\n return (typeof chainName === 'string')\n }\n}\n\n\nexport type IEthereumAccountResult = {\n address: string\n chainId: number\n error: null\n} | {\n address: null\n chainId: number | null\n error: IEthereumExtensionError\n}\n\nconst getOrRequestAccounts = async (requestInsteadOfGet: boolean = false): Promise => {\n const windowIsOk = await documentReadyPromiseAndWindowIsOk()\n if (!windowIsOk || !(window as any).ethereum) {\n const error = new Error('No extension found') as IEthereumExtensionError\n error.extensionNotFound = true\n error.userRejected = false\n\n return {\n address: null,\n chainId: null,\n error\n }\n }\n\n const ethereum = (window as any).ethereum\n let accounts: string[] = []\n try {\n accounts = await ethereum.request({method: requestInsteadOfGet ? 'eth_requestAccounts' : 'eth_accounts'})\n const chainId = parseInt(ethereum.chainId, 16)\n\n return {\n address: accounts[0],\n chainId,\n error: null\n }\n } catch (_error: any) {\n // EIP-1193 userRejectedRequest error code is 4001\n // If this happens, the user rejected the connection request.\n\n const error = _error as IEthereumExtensionError\n error.userRejected = _error.code === 4001\n error.extensionNotFound = false\n\n const chainIdStr = (window as any).ethereum?.chainId\n const chainId = typeof chainIdStr === 'string' ? parseInt(chainIdStr, 16) : NaN\n\n return {\n address: null,\n chainId: isNaN(chainId) ? null : chainId,\n error,\n }\n }\n}\n\n\nexport const addChainToExtension = async (chainData: AddEthereumChainParameter): Promise => {\n const windowIsOk = await documentReadyPromiseAndWindowIsOk()\n if (!windowIsOk) return\n\n const ethereum = (window as any).ethereum\n\n if (ethereum.chainId === chainData.chainId) {\n console.log(`No need to add the chain to wallet - wallet already has ${chainData.chainName}'s chainId: ${ethereum.chainId} (${parseInt(ethereum.chainId)})`)\n return\n }\n\n try {\n await ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [chainData],\n })\n } catch (error: any) {\n console.error('Error during attempt to add chain to wallet', error.code, error)\n throw error\n }\n}\n\n\nconst UNIQUE_CHAINS_DATA_FOR_EXTENSIONS: Record = {\n unique: {\n chainId: \"0x22b0\",\n chainName: 'Unique',\n nativeCurrency: {\n name: 'Unique',\n symbol: 'UNQ',\n decimals: 18,\n },\n rpcUrls: [`https://rpc.unique.network`],\n iconUrls: [`https://ipfs.unique.network/ipfs/QmbJ7CGZ2GxWMp7s6jy71UGzRsMe4w3KANKXDAExYWdaFR`],\n blockExplorerUrls: ['https://uniquescan.io/unique/'],\n },\n quartz: {\n chainId: \"0x22b1\",\n chainName: \"Quartz by Unique\",\n nativeCurrency: {\n name: 'Quartz',\n symbol: 'QTZ',\n decimals: 18,\n },\n rpcUrls: [`https://rpc-quartz.unique.network`],\n iconUrls: [`https://ipfs.unique.network/ipfs/QmaGPdccULQEFcCGxzstnmE8THfac2kSiGwvWRAiaRq4dp`],\n blockExplorerUrls: ['https://uniquescan.io/quartz/'],\n },\n opal: {\n chainId: \"0x22b2\",\n chainName: \"Opal by Unique\",\n nativeCurrency: {\n name: 'Opal',\n symbol: 'OPL',\n decimals: 18,\n },\n rpcUrls: [`https://rpc-opal.unique.network`],\n iconUrls: [`https://ipfs.unique.network/ipfs/QmYJDpmWyjDa3H6BxweFmQXk4fU8b1GU7M9EqYcaUNvXzc`],\n blockExplorerUrls: ['https://uniquescan.io/opal/'],\n },\n sapphire: {\n chainId: \"0x22b3\",\n chainName: \"Sapphire by Unique\",\n nativeCurrency: {\n name: 'Quartz',\n symbol: 'QTZ',\n decimals: 18,\n },\n rpcUrls: [`https://rpc-sapphire.unique.network`],\n iconUrls: [`https://ipfs.unique.network/ipfs/Qmd1PGt4cDRjFbh4ihP5QKEd4XQVwN1MkebYKdF56V74pf`],\n blockExplorerUrls: ['https://uniquescan.io/sapphire/'],\n },\n}\n\nconst addChain: Record Promise> & { anyChain: (chainData: AddEthereumChainParameter) => Promise } = {\n unique: () => addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.unique),\n quartz: () => addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.quartz),\n opal: () => addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.opal),\n sapphire: () => addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.sapphire),\n anyChain: (chainData: AddEthereumChainParameter) => addChainToExtension(chainData),\n}\n\nconst switchToChain = async (chainId: number | string): Promise => {\n const windowIsOk = await documentReadyPromiseAndWindowIsOk()\n if (!windowIsOk) return\n\n const parsedChainId: string = typeof chainId === 'string' ? chainId : '0x' + chainId.toString(16)\n\n await (window as any).ethereum.request({method: 'wallet_switchEthereumChain', params: [{chainId: parsedChainId}]})\n}\nconst switchChainTo: Record Promise> & { anyChain: (chainId: number | string) => Promise } = {\n unique: () => switchToChain(chainNameToChainId.unique),\n quartz: () => switchToChain(chainNameToChainId.quartz),\n opal: () => switchToChain(chainNameToChainId.opal),\n sapphire: () => switchToChain(chainNameToChainId.sapphire),\n anyChain: (chainId) => switchToChain(chainId)\n}\n\nexport type UpdateReason = 'account' | 'chain'\n\nconst subscribeOnChanges = (cb: (result: { reason: UpdateReason, chainId: number | null, address: string | null }) => void): (() => void) => {\n if (typeof window === 'undefined' || !(window as any).ethereum) {\n return () => undefined\n }\n\n const ethereum = (window as any).ethereum\n\n const getAccounts = (reason: UpdateReason) => {\n if (ethereum.chainId && ethereum.selectedAddress) {\n cb({reason, address: ethereum.selectedAddress, chainId: parseInt(ethereum.chainId, 16)})\n } else {\n getOrRequestAccounts().then(({chainId, address, error}) => {\n if (error) {\n throw error\n }\n\n cb({reason, chainId, address})\n })\n }\n }\n\n ethereum.on('accountsChanged', () => {\n getAccounts('account')\n })\n ethereum.on('chainChanged', () => {\n getAccounts('chain')\n })\n return () => {\n ethereum.removeListener('accountsChanged', getAccounts)\n ethereum.removeListener('networkChanged', getAccounts)\n }\n}\n\nimport type {ContractReceipt, Event} from 'ethers'\n\nconst parseEthersTxReceipt = (tx: ContractReceipt, options = {decimals: 18}) => {\n const events = (tx.events || []).filter(event => !!event.event).map((event: Event, index) => {\n const args = event.args\n return {\n name: event.event || `event_${index.toString().padStart(4, '0')}`,\n // args: event.args!,\n events: !args ? {} : Object.keys(args)\n .filter(key => isNaN(parseInt(key)))\n .reduce((acc, key) => {\n const rawValue = args[key]\n const value = (typeof rawValue === 'object' && rawValue?._isBigNumber)\n ? rawValue.toBigInt()\n : rawValue\n acc[key] = value\n return acc\n }, {} as {[K: string]: any})\n }\n }).reduce((acc, elem) => {\n acc[elem.name] = elem.events\n return acc\n }, {} as {[K: string]: any}) as ParsedEvents\n\n const rawPrice = tx.gasUsed.toBigInt() * tx.effectiveGasPrice.toBigInt()\n const priceStr = rawPrice.toString().padStart(options.decimals + 1, '0')\n const price = parseFloat([priceStr.slice(0, -options.decimals), '.', priceStr.slice(-options.decimals)].join(''))\n\n return {\n get tx() {\n return tx\n },\n from: tx.from,\n to: tx.to,\n rawPrice,\n price,\n rawEvents: tx.events || [],\n events,\n gasUsed: tx.gasUsed.toBigInt(),\n cumulativeGasUsed: tx.cumulativeGasUsed.toBigInt(),\n effectiveGasPrice: tx.effectiveGasPrice.toBigInt(),\n }\n}\n\nexport type {UNIQUE_CHAIN}\n\nexport const Ethereum = {\n getOrRequestAccounts,\n requestAccounts: () => getOrRequestAccounts(true),\n getAccounts: () => getOrRequestAccounts(),\n subscribeOnChanges,\n\n chainNameToChainId,\n chainIdToChainName,\n\n currentChainIs,\n addChain,\n switchChainTo,\n\n UNIQUE_CHAINS_DATA_FOR_EXTENSIONS,\n\n parseEthersTxReceipt,\n}\n","// =========================================\n// Polkadot types\n// =========================================\nimport {documentReadyPromiseAndWindowIsOk} from './utils'\nexport type KeypairType = 'ed25519' | 'sr25519' | 'ecdsa' | 'ethereum'\n\ninterface InjectedAccount {\n address: string\n genesisHash?: string | null\n name?: string\n type?: KeypairType\n}\n\ninterface InjectedWallet {\n accounts: {\n get(): Promise\n }\n metadata?: any\n provider?: any\n signer: Signer\n}\n\ninterface NonInjectedWallet {\n enable(): Promise\n\n version: string\n\n // waiting for PR https://github.com/polkadot-js/extension/pull/1126 being merged\n isEnabled?: boolean\n}\n\nexport interface SignerPayloadJSON {\n address: string\n blockHash: string\n blockNumber: string\n era: string\n genesisHash: string\n method: string\n nonce: string\n specVersion: string\n tip: string\n transactionVersion: string\n signedExtensions: string[]\n version: number\n}\n\nexport type SignerPayloadJSONWithAddressOptional = Omit & { address?: string }\n\nexport interface SignerPayloadRaw {\n data: string\n address: string\n type: 'bytes' | 'payload'\n}\n\nexport type SignerPayloadRawWithAddressAndTypeOptional = {\n data: string\n address?: SignerPayloadRaw['address']\n type?: SignerPayloadRaw['type']\n}\n\nexport interface SignerResult {\n id: number\n signature: string //The resulting signature in hex string\n}\n\ninterface Signer {\n signPayload: (payload: SignerPayloadJSON) => Promise\n signRaw: (raw: SignerPayloadRaw) => Promise\n update?: (id: number, status: any) => void\n}\n\n// =========================================\n// Unique SDK types\n// =========================================\nexport interface UNIQUE_SDK_UnsignedTxPayloadBody {\n signerPayloadJSON: SignerPayloadJSON\n signerPayloadRaw: SignerPayloadRaw\n signerPayloadHex: string\n}\n\nexport interface UNIQUE_SDK_SignTxResultResponse {\n signature: string\n signatureType: KeypairType\n}\n\n\n// =========================================\n// module types\n// =========================================\nexport interface IPolkadotExtensionWalletInfo {\n name: string\n version: string\n isEnabled: boolean | undefined\n prettyName: string\n logo: {\n ipfsCid: string,\n url: string,\n }\n}\n\nexport interface IPolkadotExtensionWallet extends IPolkadotExtensionWalletInfo, Omit {\n accounts: IPolkadotExtensionAccount[]\n}\n\nexport interface IPolkadotExtensionAccount extends Omit {\n name: string\n\n address: string\n addressShort: string\n\n id: string\n wallet: IPolkadotExtensionWalletInfo\n signRaw: (raw: SignerPayloadRawWithAddressAndTypeOptional | string) => Promise\n // signPayload and update are inherited from Signer\n\n uniqueSdkSigner: {\n sign: (unsignedTxPayload: UNIQUE_SDK_UnsignedTxPayloadBody) => Promise\n }\n\n meta: {\n genesisHash: string | null\n name: string\n source: string\n }\n type: KeypairType\n}\n\nexport type IPolkadotExtensionGenericInfo = Pick & {\n webpage: string\n}\n\n\n// =========================================\n// constants\n// =========================================\nconst IPFS_GATEWAY = \"https://gateway.pinata.cloud/ipfs/\"\n\nconst KNOWN_POLKADOT_EXTENSIONS: { [K: string]: { logoIpfsCid: string, prettyName: string, webpage: string } } = {\n \"polkadot-js\": {\n logoIpfsCid: \"QmYWczavyNyh3yM56axyyQLgRqcFQYNKe5cDFPfLL94yrz\",\n prettyName: \"Polkadot{.js}\",\n webpage: 'https://polkadot.js.org/extension/',\n },\n \"subwallet-js\": {\n logoIpfsCid: \"QmZ8BvFzGL5DRugJ3pytc1Jo1rTVYjW3mKUWBx7SvaEsdS\",\n prettyName: \"Subwallet\",\n webpage: 'https://subwallet.app/',\n },\n \"talisman\": {\n logoIpfsCid: \"QmWHn4kVoG43U5coNhoR7Ec3Vus5YPjo9SkMvoiiLoy2bY\",\n prettyName: \"Talisman\",\n webpage: 'https://talisman.xyz/',\n },\n}\nconst FALLBACK_WALLET_LOGO_IPFS_CID = \"QmSC1B9X9ugWkfHKtd5guKTidh2qjvgdn8xXzbFrrHMiBM\"\n\nconst compareTwoStrings = (a: string, b: string): number => a > b ? 1 : a < b ? -1 : 0\n\nconst knownPolkadotExtensions: IPolkadotExtensionGenericInfo[] = Object.entries(KNOWN_POLKADOT_EXTENSIONS).map(([name, info]) => {\n return {\n name,\n prettyName: info.prettyName,\n logo: {\n ipfsCid: info.logoIpfsCid,\n url: IPFS_GATEWAY + info.logoIpfsCid,\n },\n webpage: info.webpage,\n }\n}).sort((a, b) => compareTwoStrings(a.name, b.name))\n\nconst isWeb3Environment = async (): Promise => {\n const windowIsOk = await documentReadyPromiseAndWindowIsOk()\n if (!windowIsOk) {\n return false\n }\n\n const injectedWeb3 = (window as any).injectedWeb3\n\n return !!injectedWeb3 && Object.keys(injectedWeb3).length !== 0\n}\n\nexport interface IPolkadotExtensionListWalletsResult {\n wallets: IPolkadotExtensionWalletInfo[]\n info: {\n extensionFound: boolean\n enabledWalletsNumber: number\n }\n}\n\nconst getWalletInfo = (walletName: string, nonInjectedWallet: NonInjectedWallet): IPolkadotExtensionWalletInfo => {\n // waiting for PR https://github.com/polkadot-js/extension/pull/1126 being merged\n const isEnabled = nonInjectedWallet.isEnabled // walletName === 'polkadot-js' // for testing,\n\n const prettyName = KNOWN_POLKADOT_EXTENSIONS[walletName]?.prettyName || walletName\n const logo = {\n ipfsCid: KNOWN_POLKADOT_EXTENSIONS[walletName]?.logoIpfsCid || FALLBACK_WALLET_LOGO_IPFS_CID,\n url: IPFS_GATEWAY + (KNOWN_POLKADOT_EXTENSIONS[walletName]?.logoIpfsCid || FALLBACK_WALLET_LOGO_IPFS_CID),\n }\n\n return {\n name: walletName,\n version: nonInjectedWallet.version,\n prettyName,\n logo,\n isEnabled,\n }\n}\n\nconst listWallets = async (): Promise => {\n if (!(await isWeb3Environment())) {\n return {wallets: [], info: {extensionFound: false, enabledWalletsNumber: 0}}\n }\n\n const walletsArray = Object.entries((window as any).injectedWeb3) as Array<[string, NonInjectedWallet]>\n\n const wallets = walletsArray.map(([name, injectedWallet]) => getWalletInfo(name, injectedWallet))\n\n return {\n wallets,\n info: {\n extensionFound: true,\n enabledWalletsNumber: wallets.reduce((acc, wallet) => acc + (wallet.isEnabled ? 1 : 0), 0),\n },\n }\n}\n\nexport type IPolkadotExtensionLoadWalletByNameResult = {\n result: IPolkadotExtensionWallet\n error: null\n} | {\n result: null\n error: Error\n}\n\nconst loadWalletByName = async (walletName: string): Promise => {\n if (!(await isWeb3Environment())) {\n return {result: null, error: new Error(`now injected web3 found or environment not a browser`)}\n }\n\n const injectedWeb3 = (window as any).injectedWeb3\n const rawWallet = injectedWeb3[walletName] as NonInjectedWallet\n\n if (!rawWallet) {\n return {result: null, error: new Error(`Wallet with name ${walletName} not found in \"window.injectedWeb3\"`)}\n }\n\n try {\n const walletInfo = getWalletInfo(walletName, rawWallet)\n\n const wallet = await rawWallet.enable()\n const accounts = await wallet.accounts.get()\n\n const parsedWallet: IPolkadotExtensionWallet = {\n ...walletInfo,\n ...wallet,\n accounts: accounts.map((account) => {\n const address = account.address\n const addressShort = `${address.slice(0, 5)}...${address.slice(-5)}`\n\n const id = `${walletName}/${address}`\n const accountName = account.name || `${walletName}/${addressShort}`\n\n const accountType = account.type || 'sr25519'\n\n const signRaw = async (payloadRaw: SignerPayloadRawWithAddressAndTypeOptional | string): Promise => {\n if (!wallet.signer.signRaw) {\n throw new Error(`no signRaw in the wallet ${walletName}`)\n }\n\n const payload: SignerPayloadRaw = typeof payloadRaw === 'string'\n ? {address: account.address, data: payloadRaw, type: 'bytes'}\n : {address: account.address, ...payloadRaw, type: payloadRaw.type || 'bytes'}\n\n return wallet.signer.signRaw(payload)\n }\n const signPayload = async (payloadJSON: SignerPayloadJSONWithAddressOptional): Promise => {\n if (!wallet.signer.signPayload) {\n throw new Error(`no signPayload in the wallet ${walletName}`)\n }\n return wallet.signer.signPayload({address: account.address, ...payloadJSON,})\n }\n\n const uniqueSdkSigner = {\n sign: async (unsignedTxPayload: UNIQUE_SDK_UnsignedTxPayloadBody): Promise => {\n const signatureResult = await signPayload(unsignedTxPayload.signerPayloadJSON)\n return {\n signatureType: accountType,\n signature: signatureResult.signature,\n }\n }\n }\n\n const enhancedAccount: IPolkadotExtensionAccount = {\n ...account,\n name: accountName,\n id,\n address,\n addressShort,\n type: accountType,\n meta: {\n genesisHash: account.genesisHash || null,\n name: accountName,\n source: walletName,\n },\n wallet: walletInfo,\n signRaw,\n signPayload,\n update: wallet.signer.update,\n\n uniqueSdkSigner,\n }\n\n return enhancedAccount\n }),\n }\n return {result: parsedWallet, error: null}\n } catch (e: any) {\n return {result: null, error: e}\n }\n}\n\nexport interface IPolkadotExtensionLoadWalletsResult {\n wallets: IPolkadotExtensionWallet[]\n accounts: IPolkadotExtensionAccount[]\n\n rejectedWallets: Array\n\n info: {\n extensionFound: boolean\n accountsFound: boolean\n userHasWalletsButHasNoAccounts: boolean\n userHasBlockedAllWallets: boolean\n }\n}\n\nconst loadWallets = async (onlyEnabled: boolean = false): Promise => {\n if (!(await isWeb3Environment())) {\n return {\n wallets: [], accounts: [], rejectedWallets: [], info: {\n extensionFound: false,\n accountsFound: false,\n userHasWalletsButHasNoAccounts: false,\n userHasBlockedAllWallets: false,\n }\n }\n }\n\n const allWallets = await Promise.all((await listWallets()).wallets\n .filter(wallet => !onlyEnabled || wallet.isEnabled)\n .map(async (wallet) => ({\n info: wallet,\n enabled: await loadWalletByName(wallet.name)\n }))\n )\n\n const wallets: IPolkadotExtensionLoadWalletsResult['wallets'] = allWallets\n .filter(wallet => !!wallet.enabled.result)\n .map(wallet => wallet.enabled.result as IPolkadotExtensionWallet)\n .sort((a, b) => compareTwoStrings(a.name, b.name))\n\n const rejectedWallets: IPolkadotExtensionLoadWalletsResult['rejectedWallets'] = allWallets\n .filter(wallet => !!wallet.enabled.error)\n .map(wallet => {\n const error = wallet.enabled.error as Error\n\n const result: IPolkadotExtensionLoadWalletsResult['rejectedWallets'][number] = {\n ...wallet.info,\n error,\n isBlockedByUser: error.message.indexOf('is not allowed to interact with this extension') >= 0,\n }\n\n return result\n })\n .sort((a, b) => compareTwoStrings(a.name, b.name))\n\n\n const accounts: IPolkadotExtensionLoadWalletsResult['accounts'] = wallets\n .flatMap(wallet => wallet.accounts)\n .sort((a, b) =>\n compareTwoStrings(a.wallet.name + a.name + a.address, b.wallet.name + b.name + b.address)\n )\n\n return {\n wallets,\n rejectedWallets,\n accounts,\n info: {\n extensionFound: true,\n accountsFound: !!accounts.length,\n userHasWalletsButHasNoAccounts: !!wallets.length && !accounts.length,\n userHasBlockedAllWallets: !wallets.length && !!rejectedWallets.length && rejectedWallets.every(w => w.isBlockedByUser),\n }\n }\n}\n\nexport const Polkadot = {\n isWeb3Environment,\n listWallets,\n\n enableAndLoadAllWallets: () => loadWallets(false),\n loadEnabledWallets: () => loadWallets(true),\n\n loadWalletByName,\n\n constants: {\n knownPolkadotExtensions,\n extensionNames: {\n polkadot: 'polkadot-js',\n subwallet: 'subwallet-js',\n talisman: 'talisman',\n }\n }\n}\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) {\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = new Uint8Array(zeroes + (size - it4))\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","export function number(n: number) {\n if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nexport function bool(b: boolean) {\n if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nexport function bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n if (!(b instanceof Uint8Array)) throw new TypeError('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new TypeError(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n (data: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create: any;\n};\nexport function hash(hash: Hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\n\nexport function exists(instance: any, checkFinished = true) {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nexport function output(out: any, instance: any) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\n\nconst assert = {\n number,\n bool,\n bytes,\n hash,\n exists,\n output,\n};\n\nexport default assert;\n","const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nexport function fromBig(n: bigint, le = false) {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nexport function split(lst: bigint[], le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nexport const toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (h: number, l: number) => l;\nconst rotr32L = (h: number, l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\n// Removing \"export\" has 5% perf penalty -_-\nexport function add(Ah: number, Al: number, Bh: number, Bl: number) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","// Global symbol available in browsers only\ndeclare const self: Record | undefined;\nexport const crypto: { node?: any; web?: any } = {\n node: undefined,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\n","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// The import here is via the package name. This is to ensure\n// that exports mapping/resolution does fall into place.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// There is almost no big endian hardware, but js typed arrays uses platform specific endianness.\n// So, just to be sure not to corrupt anything.\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))\n */\nexport function bytesToHex(uint8a: Uint8Array): string {\n // pre-caching improves the speed 6x\n if (!(uint8a instanceof Uint8Array)) throw new Error('Uint8Array expected');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\n\n/**\n * @example hexToBytes('deadbeef')\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2) throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow. However, call to async function will return Promise\n// which will be fullfiled only on next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\n\nexport type Input = Uint8Array | string;\nexport function toBytes(data: Input): Uint8Array {\n if (typeof data === 'string') data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\n\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n if (!arrays.every((a) => a instanceof Uint8Array)) throw new Error('Uint8Array list expected');\n if (arrays.length === 1) return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash> {\n abstract blockLen: number; // Bytes per block\n abstract outputLen: number; // Bytes in output\n abstract update(buf: Input): this;\n // Writes digest into buf\n abstract digestInto(buf: Uint8Array): void;\n abstract digest(): Uint8Array;\n // Cleanup internal state. Not '.clean' because instance is not usable after that.\n // Clean usually resets instance to initial state, but it is not possible for keyed hashes if key is consumed into state.\n // NOTE: if digest is not consumed by user, user need manually call '.destroy' if zeroing is required\n abstract destroy(): void;\n // Unsafe because doesn't check if \"to\" is correct. Can be used as clone() if no opts passed.\n // Why cloneInto instead of clone? Mostly performance (same as _digestInto), but also has nice property: it reuses instance\n // which means all internal buffers is overwritten, which also causes overwrite buffer which used for digest (in some cases).\n // We don't provide any guarantees about cleanup (it is impossible to!), so should be enough for now.\n abstract _cloneInto(to?: T): T;\n // Safe version that clones internal state\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot destroy state, next call can require more bytes.\n */\nexport type HashXOF> = Hash & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n throw new TypeError('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType;\n\nexport function wrapConstructor>(hashConstructor: () => Hash) {\n const hashC = (message: Input): Uint8Array => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\n\nexport function wrapConstructorWithOpts, T extends Object>(\n hashCons: (opts?: T) => Hash\n) {\n const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({} as T);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts: T) => hashCons(opts);\n return hashC;\n}\n\n/**\n * Secure PRNG\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n } else if (crypto.node) {\n return new Uint8Array(crypto.node.randomBytes(bytesLength).buffer);\n } else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n}\n","import assert from './_assert.js';\nimport u64 from './_u64.js';\nimport {\n Hash,\n u32,\n Input,\n toBytes,\n wrapConstructor,\n wrapConstructorWithOpts,\n HashXOF,\n} from './utils.js';\n\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA]: [number[], number[], bigint[]] = [[], [], []];\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n) t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = u64.split(_SHA3_IOTA, true);\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) =>\n s > 32 ? u64.rotlBH(h, l, s) : u64.rotlSH(h, l, s);\nconst rotlL = (h: number, l: number, s: number) =>\n s > 32 ? u64.rotlBL(h, l, s) : u64.rotlSL(h, l, s);\n\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s: Uint32Array, rounds: number = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++) B[x] = s[y + x];\n for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\n\nexport class Keccak extends Hash implements HashXOF {\n protected state: Uint8Array;\n protected pos = 0;\n protected posOut = 0;\n protected finished = false;\n protected state32: Uint32Array;\n protected destroyed = false;\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(\n public blockLen: number,\n public suffix: number,\n public outputLen: number,\n protected enableXOF = false,\n protected rounds: number = 24\n ) {\n super();\n // Can be passed from user as dkLen\n assert.number(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n protected keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data: Input) {\n assert.exists(this);\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen) this.keccak();\n }\n return this;\n }\n protected finish() {\n if (this.finished) return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n protected writeInto(out: Uint8Array): Uint8Array {\n assert.exists(this, false);\n assert.bytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len; ) {\n if (this.posOut >= blockLen) this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out: Uint8Array): Uint8Array {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes: number): Uint8Array {\n assert.number(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out: Uint8Array) {\n assert.output(out, this);\n if (this.finished) throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to?: Keccak): Keccak {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\n\nexport const sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = gen(0x06, 136, 256 / 8);\nexport const sha3_384 = gen(0x06, 104, 384 / 8);\nexport const sha3_512 = gen(0x06, 72, 512 / 8);\nexport const keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = gen(0x01, 136, 256 / 8);\nexport const keccak_384 = gen(0x01, 104, 384 / 8);\nexport const keccak_512 = gen(0x01, 72, 512 / 8);\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n wrapConstructorWithOpts(\n (opts: ShakeOpts = {}) =>\n new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n );\n\nexport const shake128 = genShake(0x1f, 168, 128 / 8);\nexport const shake256 = genShake(0x1f, 136, 256 / 8);\n","import assert from './_assert.js';\nimport { Hash, Input, toBytes, u32 } from './utils.js';\n// prettier-ignore\nexport const SIGMA = new Uint8Array([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n // For BLAKE2b, the two extra permutations for rounds 10 and 11 are SIGMA[10..11] = SIGMA[0..1].\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n]);\n\nexport type BlakeOpts = {\n dkLen?: number;\n key?: Input;\n salt?: Input;\n personalization?: Input;\n};\n\nexport abstract class BLAKE2> extends Hash {\n protected abstract compress(msg: Uint32Array, offset: number, isLast: boolean): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected buffer: Uint8Array;\n protected buffer32: Uint32Array;\n protected length: number = 0;\n protected pos: number = 0;\n protected finished = false;\n protected destroyed = false;\n\n constructor(\n readonly blockLen: number,\n public outputLen: number,\n opts: BlakeOpts = {},\n keyLen: number,\n saltLen: number,\n persLen: number\n ) {\n super();\n assert.number(blockLen);\n assert.number(outputLen);\n assert.number(keyLen);\n if (outputLen < 0 || outputLen > keyLen)\n throw new Error('Blake2: outputLen bigger than keyLen');\n if (opts.key !== undefined && (opts.key.length < 1 || opts.key.length > keyLen))\n throw new Error(`Key should be up 1..${keyLen} byte long or undefined`);\n if (opts.salt !== undefined && opts.salt.length !== saltLen)\n throw new Error(`Salt should be ${saltLen} byte long or undefined`);\n if (opts.personalization !== undefined && opts.personalization.length !== persLen)\n throw new Error(`Personalization should be ${persLen} byte long or undefined`);\n this.buffer32 = u32((this.buffer = new Uint8Array(blockLen)));\n }\n update(data: Input) {\n assert.exists(this);\n // Main difference with other hashes: there is flag for last block,\n // so we cannot process current block before we know that there\n // is the next one. This significantly complicates logic and reduces ability\n // to do zero-copy processing\n const { blockLen, buffer, buffer32 } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n // If buffer is full and we still have input (don't process last block, same as blake2s)\n if (this.pos === blockLen) {\n this.compress(buffer32, 0, false);\n this.pos = 0;\n }\n const take = Math.min(blockLen - this.pos, len - pos);\n const dataOffset = data.byteOffset + pos;\n // full block && aligned to 4 bytes && not last in input\n if (take === blockLen && !(dataOffset % 4) && pos + take < len) {\n const data32 = new Uint32Array(data.buffer, dataOffset, Math.floor((len - pos) / 4));\n for (let pos32 = 0; pos + blockLen < len; pos32 += buffer32.length, pos += blockLen) {\n this.length += blockLen;\n this.compress(data32, pos32, false);\n }\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n this.length += take;\n pos += take;\n }\n return this;\n }\n digestInto(out: Uint8Array) {\n assert.exists(this);\n assert.output(out, this);\n const { pos, buffer32 } = this;\n this.finished = true;\n // Padding\n this.buffer.subarray(pos).fill(0);\n this.compress(buffer32, 0, true);\n const out32 = u32(out);\n this.get().forEach((v, i) => (out32[i] = v));\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n const { buffer, length, finished, destroyed, outputLen, pos } = this;\n to ||= new (this.constructor as any)({ dkLen: outputLen }) as T;\n to.set(...this.get());\n to.length = length;\n to.finished = finished;\n to.destroyed = destroyed;\n to.outputLen = outputLen;\n to.buffer.set(buffer);\n to.pos = pos;\n return to;\n }\n}\n","import { BLAKE2, BlakeOpts, SIGMA } from './_blake2.js';\nimport u64 from './_u64.js';\nimport { toBytes, u32, wrapConstructorWithOpts } from './utils.js';\n\n// Same as SHA-512 but LE\n// prettier-ignore\nconst IV = new Uint32Array([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19\n]);\n// Temporary buffer\nconst BUF = new Uint32Array(32);\n\n// Mixing function G splitted in two halfs\nfunction G1(a: number, b: number, c: number, d: number, msg: Uint32Array, x: number) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BUF[2 * a], Ah = BUF[2 * a + 1]; // prettier-ignore\n let Bl = BUF[2 * b], Bh = BUF[2 * b + 1]; // prettier-ignore\n let Cl = BUF[2 * c], Ch = BUF[2 * c + 1]; // prettier-ignore\n let Dl = BUF[2 * d], Dh = BUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 32)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotr32H(Dh, Dl), Dl: u64.rotr32L(Dh, Dl) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 24)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrSH(Bh, Bl, 24), Bl: u64.rotrSL(Bh, Bl, 24) });\n (BUF[2 * a] = Al), (BUF[2 * a + 1] = Ah);\n (BUF[2 * b] = Bl), (BUF[2 * b + 1] = Bh);\n (BUF[2 * c] = Cl), (BUF[2 * c + 1] = Ch);\n (BUF[2 * d] = Dl), (BUF[2 * d + 1] = Dh);\n}\n\nfunction G2(a: number, b: number, c: number, d: number, msg: Uint32Array, x: number) {\n // NOTE: V is LE here\n const Xl = msg[x], Xh = msg[x + 1]; // prettier-ignore\n let Al = BUF[2 * a], Ah = BUF[2 * a + 1]; // prettier-ignore\n let Bl = BUF[2 * b], Bh = BUF[2 * b + 1]; // prettier-ignore\n let Cl = BUF[2 * c], Ch = BUF[2 * c + 1]; // prettier-ignore\n let Dl = BUF[2 * d], Dh = BUF[2 * d + 1]; // prettier-ignore\n // v[a] = (v[a] + v[b] + x) | 0;\n let ll = u64.add3L(Al, Bl, Xl);\n Ah = u64.add3H(ll, Ah, Bh, Xh);\n Al = ll | 0;\n // v[d] = rotr(v[d] ^ v[a], 16)\n ({ Dh, Dl } = { Dh: Dh ^ Ah, Dl: Dl ^ Al });\n ({ Dh, Dl } = { Dh: u64.rotrSH(Dh, Dl, 16), Dl: u64.rotrSL(Dh, Dl, 16) });\n // v[c] = (v[c] + v[d]) | 0;\n ({ h: Ch, l: Cl } = u64.add(Ch, Cl, Dh, Dl));\n // v[b] = rotr(v[b] ^ v[c], 63)\n ({ Bh, Bl } = { Bh: Bh ^ Ch, Bl: Bl ^ Cl });\n ({ Bh, Bl } = { Bh: u64.rotrBH(Bh, Bl, 63), Bl: u64.rotrBL(Bh, Bl, 63) });\n (BUF[2 * a] = Al), (BUF[2 * a + 1] = Ah);\n (BUF[2 * b] = Bl), (BUF[2 * b + 1] = Bh);\n (BUF[2 * c] = Cl), (BUF[2 * c + 1] = Ch);\n (BUF[2 * d] = Dl), (BUF[2 * d + 1] = Dh);\n}\n\nclass BLAKE2b extends BLAKE2 {\n // Same as SHA-512, but LE\n private v0l = IV[0] | 0;\n private v0h = IV[1] | 0;\n private v1l = IV[2] | 0;\n private v1h = IV[3] | 0;\n private v2l = IV[4] | 0;\n private v2h = IV[5] | 0;\n private v3l = IV[6] | 0;\n private v3h = IV[7] | 0;\n private v4l = IV[8] | 0;\n private v4h = IV[9] | 0;\n private v5l = IV[10] | 0;\n private v5h = IV[11] | 0;\n private v6l = IV[12] | 0;\n private v6h = IV[13] | 0;\n private v7l = IV[14] | 0;\n private v7h = IV[15] | 0;\n\n constructor(opts: BlakeOpts = {}) {\n super(128, opts.dkLen === undefined ? 64 : opts.dkLen, opts, 64, 16, 16);\n const keyLength = opts.key ? opts.key.length : 0;\n this.v0l ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);\n if (opts.salt) {\n const salt = u32(toBytes(opts.salt));\n this.v4l ^= salt[0];\n this.v4h ^= salt[1];\n this.v5l ^= salt[2];\n this.v5h ^= salt[3];\n }\n if (opts.personalization) {\n const pers = u32(toBytes(opts.personalization));\n this.v6l ^= pers[0];\n this.v6h ^= pers[1];\n this.v7l ^= pers[2];\n this.v7h ^= pers[3];\n }\n if (opts.key) {\n // Pad to blockLen and update\n const tmp = new Uint8Array(this.blockLen);\n tmp.set(toBytes(opts.key));\n this.update(tmp);\n }\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n let {v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h} = this;\n return [v0l, v0h, v1l, v1h, v2l, v2h, v3l, v3h, v4l, v4h, v5l, v5h, v6l, v6h, v7l, v7h];\n }\n // prettier-ignore\n protected set(\n v0l: number, v0h: number, v1l: number, v1h: number,\n v2l: number, v2h: number, v3l: number, v3h: number,\n v4l: number, v4h: number, v5l: number, v5h: number,\n v6l: number, v6h: number, v7l: number, v7h: number\n ) {\n this.v0l = v0l | 0;\n this.v0h = v0h | 0;\n this.v1l = v1l | 0;\n this.v1h = v1h | 0;\n this.v2l = v2l | 0;\n this.v2h = v2h | 0;\n this.v3l = v3l | 0;\n this.v3h = v3h | 0;\n this.v4l = v4l | 0;\n this.v4h = v4h | 0;\n this.v5l = v5l | 0;\n this.v5h = v5h | 0;\n this.v6l = v6l | 0;\n this.v6h = v6h | 0;\n this.v7l = v7l | 0;\n this.v7h = v7h | 0;\n }\n protected compress(msg: Uint32Array, offset: number, isLast: boolean) {\n this.get().forEach((v, i) => (BUF[i] = v)); // First half from state.\n BUF.set(IV, 16); // Second half from IV.\n let { h, l } = u64.fromBig(BigInt(this.length));\n BUF[24] = IV[8] ^ l; // Low word of the offset.\n BUF[25] = IV[9] ^ h; // High word.\n // Invert all bits for last block\n if (isLast) {\n BUF[28] = ~BUF[28];\n BUF[29] = ~BUF[29];\n }\n let j = 0;\n const s = SIGMA;\n for (let i = 0; i < 12; i++) {\n G1(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G2(0, 4, 8, 12, msg, offset + 2 * s[j++]);\n G1(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G2(1, 5, 9, 13, msg, offset + 2 * s[j++]);\n G1(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G2(2, 6, 10, 14, msg, offset + 2 * s[j++]);\n G1(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n G2(3, 7, 11, 15, msg, offset + 2 * s[j++]);\n\n G1(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G2(0, 5, 10, 15, msg, offset + 2 * s[j++]);\n G1(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G2(1, 6, 11, 12, msg, offset + 2 * s[j++]);\n G1(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G2(2, 7, 8, 13, msg, offset + 2 * s[j++]);\n G1(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n G2(3, 4, 9, 14, msg, offset + 2 * s[j++]);\n }\n this.v0l ^= BUF[0] ^ BUF[16];\n this.v0h ^= BUF[1] ^ BUF[17];\n this.v1l ^= BUF[2] ^ BUF[18];\n this.v1h ^= BUF[3] ^ BUF[19];\n this.v2l ^= BUF[4] ^ BUF[20];\n this.v2h ^= BUF[5] ^ BUF[21];\n this.v3l ^= BUF[6] ^ BUF[22];\n this.v3h ^= BUF[7] ^ BUF[23];\n this.v4l ^= BUF[8] ^ BUF[24];\n this.v4h ^= BUF[9] ^ BUF[25];\n this.v5l ^= BUF[10] ^ BUF[26];\n this.v5h ^= BUF[11] ^ BUF[27];\n this.v6l ^= BUF[12] ^ BUF[28];\n this.v6h ^= BUF[13] ^ BUF[29];\n this.v7l ^= BUF[14] ^ BUF[30];\n this.v7h ^= BUF[15] ^ BUF[31];\n BUF.fill(0);\n }\n destroy() {\n this.destroyed = true;\n this.buffer32.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/**\n * BLAKE2b - optimized for 64-bit platforms. JS doesn't have uint64, so it's slower than BLAKE2s.\n * @param msg - message that would be hashed\n * @param opts - dkLen, key, salt, personalization\n */\nexport const blake2b = wrapConstructorWithOpts((opts) => new BLAKE2b(opts));\n","export const HexString = {\n fromArray: (bytes: number[] | Uint8Array) => {\n if (!(bytes instanceof Uint8Array) && !Array.isArray(bytes)) {\n throw new Error(`HexString.fromArray: passed bytes obj is not an Array or Uint8Array: ${typeof bytes}, ${bytes}`)\n }\n const arr = bytes instanceof Uint8Array ? Array.from(bytes) : bytes\n return '0x' + arr.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '');\n },\n fromU8a: (bytes: number[] | Uint8Array) => HexString.fromArray(bytes),\n toArray(hexString: string): number[] {\n if (typeof hexString !== 'string') {\n throw new Error(`HexString.toArray: passed string is not a string: ${typeof hexString}`)\n }\n\n const str: string = hexString.startsWith('0x') ? hexString.slice(2) : hexString\n const pairs: RegExpMatchArray = str.match(/.{1,2}/g) || []\n return pairs.map((byte) => parseInt(byte, 16))\n },\n toU8a: (hexString: string): Uint8Array => Uint8Array.from(HexString.toArray(hexString)),\n}\n\n\nexport const Utf8 = {\n stringToU8a(str: string): Uint8Array {\n const u8a = new Uint8Array(Utf8.lengthInBytes(str))\n\n let offset = 0\n const start = offset\n let c1: number = 0 // character 1\n let c2: number = 0 // character 2\n\n let i = 0\n\n while (i < str.length) {\n c1 = str.charCodeAt(i)\n if (c1 < 128) {\n u8a[offset++] = c1\n } else if (c1 < 2048) {\n u8a[offset++] = c1 >> 6 | 192\n u8a[offset++] = c1 & 63 | 128\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = str.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF)\n ++i\n u8a[offset++] = c1 >> 18 | 240\n u8a[offset++] = c1 >> 12 & 63 | 128\n u8a[offset++] = c1 >> 6 & 63 | 128\n u8a[offset++] = c1 & 63 | 128\n } else {\n u8a[offset++] = c1 >> 12 | 224\n u8a[offset++] = c1 >> 6 & 63 | 128\n u8a[offset++] = c1 & 63 | 128\n }\n\n i += 1\n }\n const diff = offset - start\n\n return u8a\n },\n stringToNumberArray(str: string): number[] {\n return Array.from(Utf8.stringToU8a(str))\n },\n u8aToString(u8a: Uint8Array): string {\n let start = 0\n let end = u8a.length\n\n if (end - start < 1) {\n return \"\"\n }\n\n let str = \"\"\n\n let i = start\n\n while (i < end) {\n const t = u8a[i++]\n if (t <= 0x7F) {\n str += String.fromCharCode(t);\n } else if (t >= 0xC0 && t < 0xE0) {\n str += String.fromCharCode((t & 0x1F) << 6 | u8a[i++] & 0x3F)\n } else if (t >= 0xE0 && t < 0xF0) {\n str += String.fromCharCode((t & 0xF) << 12 | (u8a[i++] & 0x3F) << 6 | u8a[i++] & 0x3F)\n } else if (t >= 0xF0) {\n const t2 = ((t & 7) << 18 | (u8a[i++] & 0x3F) << 12 | (u8a[i++] & 0x3F) << 6 | u8a[i++] & 0x3F) - 0x10000\n str += String.fromCharCode(0xD800 + (t2 >> 10))\n str += String.fromCharCode(0xDC00 + (t2 & 0x3FF))\n }\n }\n\n return str\n },\n numberArrayToString(arr: number[] | Uint8Array): string {\n return Utf8.u8aToString(Uint8Array.from(arr))\n },\n stringToHexString(str: string): string {\n return HexString.fromU8a(Utf8.stringToU8a(str))\n },\n hexStringToString(hexString: string): string {\n return Utf8.u8aToString(HexString.toU8a(hexString))\n },\n lengthInBytes(str: string): number {\n let len = 0\n let c = 0\n\n let i = 0\n\n while (i < str.length) {\n c = str.charCodeAt(i) as number\n if (c < 128) {\n len += 1\n } else if (c < 2048) {\n len += 2\n } else if ((c & 0xFC00) === 0xD800 && ((str.charCodeAt(i + 1) as number) & 0xFC00) === 0xDC00) {\n ++i\n len += 4\n } else {\n len += 3\n }\n\n i += 1\n }\n return len\n },\n}\n\n\nexport const Utf16 = {\n stringToU16a(str: string): Uint16Array {\n const u16arr = new Uint16Array(Utf16.lengthInBytes(str))\n\n let i = 0\n\n while (i < str.length) {\n let cp = str.codePointAt(i) as number\n\n if (cp <= 0xFFFF) {\n u16arr[i++] = cp\n } else {\n cp -= 0x10000\n u16arr[i++] = (cp >> 10) + 0xD800\n u16arr[i++] = (cp % 0x400) + 0xDC00\n }\n }\n return u16arr\n },\n stringToNumberArray(str: string): number[] {\n return Array.from(Utf16.stringToU16a(str))\n },\n numberArrayToString(arr: number[] | Uint16Array) {\n let i = 0\n const len = arr.length\n let s = ''\n\n while (i < len - 1) {\n const c1 = arr[i]\n const c2 = arr[i + 1]\n\n if (c1 >= 0xD800 && c1 <= 0xDFFF) {\n if (c2 >= 0xDC00 && c2 <= 0xDFFF) {\n s += String.fromCodePoint((c1 - 0xD800) * 0x400 + c2 - 0xDC00 + 0x10000)\n i += 2\n } else {\n throw new Error(`invalid UTF16 sequence: first u16 is ${c1}, second u16 is ${c2}`)\n }\n } else {\n s += String.fromCodePoint(c1)\n i += 1\n }\n }\n\n if (i < len) {\n s += String.fromCodePoint(arr[len - 1])\n }\n\n return s\n },\n u16aToString(arr: number[] | Uint16Array): string {\n return Utf16.numberArrayToString(arr)\n },\n lengthInBytes(str: string): number {\n let i = 0\n\n while (i < str.length) {\n i += (str.codePointAt(i) as number <= 0xFFFF) ? 1 : 2\n }\n\n return i\n },\n}\n\nexport const UtfHelpers = {\n HexString,\n Utf8,\n Utf16,\n}\n","import * as Address from './Address'\nimport * as StringUtils from './StringUtils'\nimport * as constants from './Address/constants'\n\nexport {\n Address,\n StringUtils,\n constants,\n}\n\nexport * from './types'\n","import {COLLECTION_ADDRESS_PREFIX, NESTING_PREFIX} from './constants'\n\nimport {\n addressToEvm, compareSubstrateAddresses,\n decodeSubstrateAddress, encodeSubstrateAddress,\n evmToAddress,\n normalizeSubstrateAddress\n} from './substrate'\n\nimport {\n collectionIdAndTokenIdToNestingAddress,\n collectionIdToEthAddress, compareEthereumAddresses,\n ethAddressToCollectionId,\n nestingAddressToCollectionIdAndTokenId,\n normalizeEthereumAddress\n} from './ethereum'\nimport {\n CrossAccountId, CrossAccountIdUncapitalized,\n EthAddressObj, EthAddressObjUncapitalized,\n SubAddressObj, SubAddressObjUncapitalized,\n EnhancedCrossAccountId,\n} from '../types'\nimport {\n addressInAnyFormToEnhancedCrossAccountId,\n guessAddressAndExtractCrossAccountIdSafe,\n guessAddressAndExtractCrossAccountIdUnsafe,\n substrateOrMirrorIfEthereum\n} from './crossAccountId'\n\nimport * as algorithms from './imports'\nimport * as constants from './constants'\nimport {add} from \"@noble/hashes/_u64\";\n\nexport {constants, algorithms}\n\nconst ETH_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\n\nexport type DecodeSubstrateAddressResult = {\n u8a: Uint8Array\n hex: string\n bigint: bigint\n ss58Prefix: number\n}\n\nexport const validate = {\n substrateAddress: (address: string) => {\n decodeSubstrateAddress(address)\n return true\n },\n ethereumAddress: (address: string) => {\n if (!is.ethereumAddress(address)) {\n throw new Error(`address \"${address}\" is not valid ethereum address`)\n }\n return true\n },\n collectionAddress: (address: string) => {\n if (!is.collectionAddress(address)) {\n throw new Error(`address ${address} is not a collection address`)\n }\n return true\n },\n nestingAddress: (address: string) => {\n if (!is.nestingAddress(address)) {\n throw new Error(`address ${address} is not a nesting address`)\n }\n return true\n },\n collectionId: (collectionId: number) => {\n if (!is.collectionId(collectionId)) {\n throw new Error(`collectionId should be a number between 0 and 0xffffffff`)\n }\n return true\n },\n tokenId: (tokenId: number) => {\n if (!is.tokenId(tokenId)) {\n throw new Error(`collectionId should be a number between 0 and 0xffffffff`)\n }\n return true\n },\n}\n\nexport const is = {\n substrateAddress: (address: string): boolean => {\n try {\n decodeSubstrateAddress(address)\n return true\n } catch {\n return false\n }\n },\n ethereumAddress: (address: string): boolean => {\n return typeof address === 'string' && address.length === 42 && !!address.match(ETH_ADDRESS_REGEX)\n },\n\n collectionAddress: (address: string): boolean => {\n return is.ethereumAddress(address) && address.toLowerCase().startsWith(COLLECTION_ADDRESS_PREFIX)\n },\n nestingAddress: (address: string): boolean => {\n return is.ethereumAddress(address) && address.toLowerCase().startsWith(NESTING_PREFIX)\n },\n\n collectionId: (collectionId: number): boolean => {\n return !(typeof collectionId !== 'number' || isNaN(collectionId) || collectionId < 0 || collectionId > 0xffffffff)\n },\n tokenId: (tokenId: number): boolean => {\n return !(typeof tokenId !== 'number' || isNaN(tokenId) || tokenId < 0 || tokenId > 0xffffffff)\n },\n\n crossAccountId(obj: any): obj is CrossAccountId {\n return is.substrateAddressObject(obj) || is.ethereumAddressObject(obj)\n },\n crossAccountIdUncapitalized(obj: any): obj is CrossAccountIdUncapitalized {\n return is.substrateAddressObjectUncapitalized(obj) || is.ethereumAddressObjectUncapitalized(obj)\n },\n substrateAddressObject(obj: any): obj is SubAddressObj {\n return typeof obj === 'object' && typeof obj?.Substrate === 'string' && is.substrateAddress(obj.Substrate)\n },\n ethereumAddressObject(obj: any): obj is EthAddressObj {\n return typeof obj === 'object' && typeof obj?.Ethereum === 'string' && is.ethereumAddress(obj.Ethereum)\n },\n substrateAddressObjectUncapitalized(obj: any): obj is SubAddressObjUncapitalized {\n return typeof obj === 'object' && typeof obj?.substrate === 'string' && is.substrateAddress(obj.substrate)\n },\n ethereumAddressObjectUncapitalized(obj: any): obj is EthAddressObjUncapitalized {\n return typeof obj === 'object' && typeof obj?.ethereum === 'string' && is.ethereumAddress(obj.ethereum)\n },\n substrateAddressInAnyForm(address: any): address is string | SubAddressObj | SubAddressObjUncapitalized {\n return typeof address === 'string'\n ? is.substrateAddress(address)\n : (\n typeof address === 'object' &&\n !!address &&\n (is.substrateAddressObject(address) || is.substrateAddressObjectUncapitalized(address))\n )\n },\n ethereumAddressInAnyForm(address: any): address is string | EthAddressObj | EthAddressObjUncapitalized {\n return typeof address === 'string'\n ? is.ethereumAddress(address)\n : (\n typeof address === 'object' &&\n !!address &&\n (is.ethereumAddressObject(address) || is.ethereumAddressObjectUncapitalized(address))\n )\n },\n validAddressInAnyForm(address: any): address is string | SubAddressObj | SubAddressObjUncapitalized | EthAddressObj | EthAddressObjUncapitalized {\n return is.ethereumAddressInAnyForm(address) || is.substrateAddressInAnyForm(address)\n }\n}\n\nexport const collection = {\n idToAddress: collectionIdToEthAddress,\n addressToId: ethAddressToCollectionId,\n}\nexport const nesting = {\n idsToAddress: collectionIdAndTokenIdToNestingAddress,\n addressToIds: nestingAddressToCollectionIdAndTokenId,\n}\n\nexport const extract = {\n address: (addressOrCrossAccountId: string | object): string => {\n const crossAccountId = guessAddressAndExtractCrossAccountIdUnsafe(addressOrCrossAccountId)\n return (crossAccountId.Substrate || crossAccountId.Ethereum) as string\n },\n addressSafe: (addressOrCrossAccountId: string | object): string | null => {\n const crossAccountId = guessAddressAndExtractCrossAccountIdSafe(addressOrCrossAccountId)\n return crossAccountId ? (crossAccountId.Substrate || crossAccountId.Ethereum) as string : null\n },\n\n addressNormalized: (addressOrCrossAccountId: string | object): string => {\n const crossAccountId = guessAddressAndExtractCrossAccountIdUnsafe(addressOrCrossAccountId, true)\n return (crossAccountId.Substrate || crossAccountId.Ethereum) as string\n },\n addressNormalizedSafe: (addressOrCrossAccountId: string | object): string | null => {\n const crossAccountId = guessAddressAndExtractCrossAccountIdSafe(addressOrCrossAccountId, true)\n return crossAccountId ? (crossAccountId.Substrate || crossAccountId.Ethereum) as string : null\n },\n\n addressForScanNormalized: (addressOrCrossAccountId: string | object): string => {\n const crossAccountId = guessAddressAndExtractCrossAccountIdUnsafe(addressOrCrossAccountId, true)\n return (crossAccountId.Substrate || crossAccountId.Ethereum!.toLowerCase()) as string\n },\n addressForScanNormalizedSafe: (addressOrCrossAccountId: string | object): string | null => {\n const crossAccountId = guessAddressAndExtractCrossAccountIdSafe(addressOrCrossAccountId, true)\n return crossAccountId ? (crossAccountId.Substrate || crossAccountId.Ethereum!.toLowerCase()) as string : null\n },\n\n\n crossAccountId: (addressOrCrossAccountId: string | object): CrossAccountId => {\n return guessAddressAndExtractCrossAccountIdUnsafe(addressOrCrossAccountId)\n },\n crossAccountIdSafe: (addressOrCrossAccountId: string | object): CrossAccountId | null => {\n return guessAddressAndExtractCrossAccountIdSafe(addressOrCrossAccountId)\n },\n\n crossAccountIdNormalized: (addressOrCrossAccountId: string | object): CrossAccountId => {\n return guessAddressAndExtractCrossAccountIdUnsafe(addressOrCrossAccountId, true)\n },\n crossAccountIdNormalizedSafe: (addressOrCrossAccountId: string | object): CrossAccountId | null => {\n return guessAddressAndExtractCrossAccountIdSafe(addressOrCrossAccountId, true)\n },\n\n\n substrateOrMirrorIfEthereum: (addressOrCrossAccountId: string | object): string => {\n return substrateOrMirrorIfEthereum(addressOrCrossAccountId)\n },\n substrateOrMirrorIfEthereumSafe: (addressOrCrossAccountId: string | object): string | null => {\n try {\n return substrateOrMirrorIfEthereum(addressOrCrossAccountId)\n } catch {\n return null\n }\n },\n\n substrateOrMirrorIfEthereumNormalized: (addressOrCrossAccountId: string | object): string => {\n return substrateOrMirrorIfEthereum(addressOrCrossAccountId, true)\n },\n substrateOrMirrorIfEthereumNormalizedSafe: (addressOrCrossAccountId: string | object): string | null => {\n try {\n return substrateOrMirrorIfEthereum(addressOrCrossAccountId, true)\n } catch {\n return null\n }\n },\n\n enhancedCrossAccountId: (addressInAnyForm: string | object, ss58Prefix: number = 42): EnhancedCrossAccountId => {\n return addressInAnyFormToEnhancedCrossAccountId(addressInAnyForm, ss58Prefix)\n },\n enhancedCrossAccountIdSafe: (addressInAnyForm: string | object, ss58Prefix: number = 42): EnhancedCrossAccountId | null => {\n try {\n return addressInAnyFormToEnhancedCrossAccountId(addressInAnyForm, ss58Prefix)\n } catch {\n return null\n }\n },\n}\n\nexport const mirror = {\n substrateToEthereum: addressToEvm,\n ethereumToSubstrate: evmToAddress,\n}\n\nexport const normalize = {\n substrateAddress: normalizeSubstrateAddress,\n ethereumAddress: normalizeEthereumAddress,\n}\n\nexport const compare = {\n substrateAddresses: compareSubstrateAddresses,\n ethereumAddresses: compareEthereumAddresses,\n}\n\nexport const substrate = {\n encode: encodeSubstrateAddress,\n decode: decodeSubstrateAddress,\n compare: compareSubstrateAddresses,\n}\n\nexport const Address = {\n constants,\n algorithms,\n is,\n validate,\n collection,\n nesting,\n extract,\n mirror,\n normalize,\n compare,\n substrate,\n}\n","export const STATIC_ADDRESSES = {\r\n contractHelpers: '0x842899ECF380553E8a4de75bF534cdf6fBF64049',\r\n collectionHelpers: '0x6C4E9fE1AE37a41E93CEE429e8E1881aBdcbb54F',\r\n}\r\nexport const NESTING_PREFIX = '0xf8238ccfff8ed887463fd5e0'\r\nexport const COLLECTION_ADDRESS_PREFIX = '0x17c4e6453cc49aaaaeaca894e6d9683e'\r\n","import basex from 'base-x'\r\nimport {keccak_256} from '@noble/hashes/sha3'\r\nimport {blake2b} from '@noble/hashes/blake2b'\r\n\r\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\r\nconst BASE64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\r\n\r\nconst base58 = basex(BASE58_ALPHABET)\r\nconst base64 = basex(BASE64_ALPHABET)\r\n\r\nexport {keccak_256, blake2b, base58, base64, basex}\r\n","import {Utf8, Utf16, HexString} from 'utf-helpers'\nexport {Utf8, Utf16, HexString}\n\nexport const DWORDHexString = {\n _checkU32: (num: number): number => {\n if (typeof num !== 'number') throw new Error(`Passed number is not a number: ${typeof num}, ${num}`)\n if (isNaN(num)) throw new Error(`Passed number is NaN: ${num}`)\n if (num < 0) throw new Error(`Passed number is less than 0: ${num}`)\n if (num > 0xFFFFFFFF) throw new Error(`Passed number is more than 2**32: ${num}`)\n if (num !== Math.floor(num)) throw new Error(`Passed number is not an integer number: ${num}`)\n\n return num\n },\n fromNumber: (n: number): string => {\n return DWORDHexString._checkU32(n).toString(16).padStart(8, '0')\n },\n toNumber: (s: string): number => {\n const num: number = parseInt(s, 16)\n\n if (isNaN(num)) throw new Error(`Passed string is not hexadecimal: ${s}`)\n\n return DWORDHexString._checkU32(num)\n }\n}\n","import {HexString, DWORDHexString} from '../StringUtils'\n\nimport {keccak_256} from \"./imports\"\nimport {COLLECTION_ADDRESS_PREFIX, NESTING_PREFIX} from \"./constants\"\nimport {is, validate} from \"./index\"\n\nconst unsafeNormalizeEthereumAddress = (address: string) => {\n const addr = address.toLowerCase().replace(/^0x/i, '')\n const addressHash = HexString.fromU8a(keccak_256(addr)).replace(/^0x/i, '')\n\n let checksumAddress = '0x'\n\n for (let i = 0; i < addr.length; i++) {\n checksumAddress += (parseInt(addressHash[i], 16) > 7)\n ? addr[i].toUpperCase()\n : addr[i]\n }\n\n return checksumAddress\n}\nexport const normalizeEthereumAddress = (address: string) => {\n validate.ethereumAddress(address)\n return unsafeNormalizeEthereumAddress(address)\n}\n\ntype EthAddressObj = { Ethereum: string }\nexport const compareEthereumAddresses = (address1: string | object, address2: string | object): boolean => {\n const addr1 = typeof address1 === 'string'\n ? address1\n : ((address1 as EthAddressObj).Ethereum || (address1 as any).ethereum) as string | undefined\n const addr2 = typeof address2 === 'string'\n ? address2\n : ((address2 as EthAddressObj).Ethereum || (address2 as any).ethereum) as string | undefined\n\n if (!addr1 || !addr2 || !is.ethereumAddress(addr1) || !is.ethereumAddress(addr2)) {\n return false\n }\n return addr1.toLowerCase() === addr2.toLowerCase()\n\n}\n\nexport const collectionIdToEthAddress = (collectionId: number): string => {\n validate.collectionId(collectionId)\n return unsafeNormalizeEthereumAddress(\n COLLECTION_ADDRESS_PREFIX +\n DWORDHexString.fromNumber(collectionId)\n )\n}\nexport const ethAddressToCollectionId = (address: string): number => {\n validate.collectionAddress(address)\n return DWORDHexString.toNumber(address.slice(-8))\n}\n\nexport const collectionIdAndTokenIdToNestingAddress = (collectionId: number, tokenId: number): string => {\n validate.collectionId(collectionId)\n validate.tokenId(tokenId)\n\n return unsafeNormalizeEthereumAddress(\n NESTING_PREFIX +\n DWORDHexString.fromNumber(collectionId) +\n DWORDHexString.fromNumber(tokenId)\n )\n}\n\nexport const nestingAddressToCollectionIdAndTokenId = (address: string): { collectionId: number, tokenId: number } => {\n validate.nestingAddress(address)\n return {\n collectionId: DWORDHexString.toNumber(address.slice(-16, -8)),\n tokenId: DWORDHexString.toNumber(address.slice(-8)),\n }\n}\n","import {base58, blake2b} from './imports'\nimport {DecodeSubstrateAddressResult, validate} from './index'\nimport {normalizeEthereumAddress} from './ethereum'\nimport {HexString} from '../StringUtils'\n\nconst blake2AsU8a = (u8a: Uint8Array, dkLen: 8 | 16 | 32 | 48 | 64 = 32): Uint8Array => {\n return blake2b(u8a, {dkLen})\n}\n\nconst u8aConcat = (u8as: readonly Uint8Array[]): Uint8Array => {\n let offset = 0\n\n let length = 0\n\n for (let i = 0; i < u8as.length; i++) {\n length += u8as[i].length\n }\n\n const result = new Uint8Array(length)\n\n for (let i = 0; i < u8as.length; i++) {\n result.set(u8as[i], offset)\n offset += u8as[i].length\n }\n\n return result\n}\n\n// strToU8a('SS58PRE')\nconst SS58_PREFIX = new Uint8Array([83, 83, 53, 56, 80, 82, 69])\n\nconst sshash = (data: Uint8Array): Uint8Array => {\n return blake2AsU8a(u8aConcat([SS58_PREFIX, data]), 64);\n}\n\nconst checkAddressChecksum = (decoded: Uint8Array, ignoreChecksum: boolean = false): [boolean, number, number, number] => {\n const ss58Length = (decoded[0] & 0b0100_0000) ? 2 : 1;\n const ss58Decoded = ss58Length === 1\n ? decoded[0]\n : ((decoded[0] & 0x3f) << 2) | (decoded[1] >> 6) | ((decoded[1] & 0x3f) << 8);\n\n // 32/33 bytes public + 2 bytes checksum + prefix\n const isPublicKey = [34 + ss58Length, 35 + ss58Length].includes(decoded.length);\n const length = decoded.length - (isPublicKey ? 2 : 1);\n\n let isValid = false\n\n if (!ignoreChecksum) {\n // calculate the hash and do the checksum byte checks\n const hash = sshash(decoded.subarray(0, length));\n isValid = (decoded[0] & 0x80) === 0 && ![46, 47].includes(decoded[0]) && (\n isPublicKey\n ? decoded[decoded.length - 2] === hash[0] && decoded[decoded.length - 1] === hash[1]\n : decoded[decoded.length - 1] === hash[0]\n )\n }\n\n return [isValid, length, ss58Length, ss58Decoded];\n}\n\nexport const normalizeSubstrateAddress = (address: string, prefix: number = 42): string => {\n return encodeSubstrateAddress(decodeSubstrateAddress(address).u8a, prefix)\n}\n\n\nexport function encodeSubstrateAddress(key: Uint8Array | string | bigint, ss58Format: number = 42): string {\n const u8a: Uint8Array = typeof key === 'string'\n ? HexString.toU8a(key)\n : typeof key === 'bigint'\n ? HexString.toU8a(key.toString(16))\n : key\n\n if (ss58Format < 0 || ss58Format > 16383 || [46, 47].includes(ss58Format)) {\n throw new Error(`ss58Format is not valid, received ${typeof ss58Format} \"${ss58Format}\"`)\n }\n\n const allowedDecodedLengths = [1, 2, 4, 8, 32, 33]\n if (!allowedDecodedLengths.includes(u8a.length)) {\n throw new Error(`key length is not valid, received ${u8a.length}, valid values are ${allowedDecodedLengths.join(', ')}`)\n }\n\n const u8aPrefix = ss58Format < 64\n ? new Uint8Array([ss58Format])\n : new Uint8Array([\n ((ss58Format & 0xfc) >> 2) | 0x40,\n (ss58Format >> 8) | ((ss58Format & 0x03) << 6)\n ])\n\n const input = u8aConcat([u8aPrefix, u8a])\n\n return base58.encode(\n u8aConcat([\n input,\n sshash(input).subarray(0, [32, 33].includes(u8a.length) ? 2 : 1)\n ])\n );\n}\n\nexport function decodeSubstrateAddress(address: string, ignoreChecksum?: boolean, ss58Format: number = -1): DecodeSubstrateAddressResult {\n let realError: Error | null = null\n\n try {\n const decoded = base58.decode(address);\n\n const allowedEncodedLengths = [3, 4, 6, 10, 35, 36, 37, 38]\n\n if (!allowedEncodedLengths.includes(decoded.length)) {\n realError = new Error(`key length is not valid, decoded key length is ${decoded.length}, valid values are ${allowedEncodedLengths.join(', ')}`)\n throw realError\n }\n\n const [isValid, endPos, ss58Length, ss58Decoded] = checkAddressChecksum(decoded, ignoreChecksum)\n\n if (!ignoreChecksum && !isValid) {\n realError = new Error(`Invalid decoded address checksum`)\n throw realError\n }\n if (![-1, ss58Decoded].includes(ss58Format)) {\n realError = new Error(`Expected ss58Format ${ss58Format}, received ${ss58Decoded}`)\n throw realError\n }\n\n const publicKey = decoded.slice(ss58Length, endPos)\n\n const hex: string = HexString.fromU8a(publicKey)\n return {\n u8a: publicKey,\n hex,\n bigint: BigInt(hex),\n ss58Prefix: ss58Decoded,\n }\n } catch (error) {\n throw realError\n ? realError\n : new Error(`Decoding ${address}: ${(error as Error).message}`)\n }\n}\n\ntype SubAddressObj = { Substrate: string }\nexport const compareSubstrateAddresses = (address1: string | object, address2: string | object): boolean => {\n const addr1 = typeof address1 === 'string'\n ? address1\n : ((address1 as SubAddressObj).Substrate || (address1 as any).substrate) as string | undefined\n const addr2 = typeof address2 === 'string'\n ? address2\n : ((address2 as SubAddressObj).Substrate || (address2 as any).substrate) as string | undefined\n\n if (!addr1 || !addr2) {\n return false\n }\n\n try {\n const decoded1 = decodeSubstrateAddress(addr1)\n const decoded2 = decodeSubstrateAddress(addr2)\n return decoded1.bigint === decoded2.bigint\n } catch (e) {\n return false\n }\n}\n\nexport const addressToEvm = (address: string, ignoreChecksum?: boolean): string => {\n const truncated = decodeSubstrateAddress(address, ignoreChecksum).u8a.subarray(0, 20)\n return normalizeEthereumAddress(HexString.fromU8a(truncated))\n}\n\n// strToU8a('evm:')\nconst EVM_PREFIX_U8A = new Uint8Array([101, 118, 109, 58])\nexport const evmToAddress = (evmAddress: string, ss58Format: number = 42): string => {\n validate.ethereumAddress(evmAddress)\n\n const message = u8aConcat([EVM_PREFIX_U8A, HexString.toU8a(evmAddress)])\n\n return encodeSubstrateAddress(blake2AsU8a(message), ss58Format)\n}\n","import {normalizeEthereumAddress} from './ethereum'\nimport {normalizeSubstrateAddress} from './substrate'\nimport {CrossAccountId, EnhancedCrossAccountId} from '../types'\nimport {is, mirror, normalize, validate} from './index'\nimport {Address} from \"../index\";\n\nexport const guessAddressAndExtractCrossAccountIdUnsafe = (rawAddress: string | object, normalize: boolean = false): CrossAccountId => {\n const address = rawAddress as any\n\n if (typeof address === 'object') {\n if (address.hasOwnProperty('Substrate')) {\n validate.substrateAddress(address.Substrate)\n return {Substrate: normalize ? normalizeSubstrateAddress(address.Substrate) : address.Substrate}\n } else if (address.hasOwnProperty('substrate')) {\n validate.substrateAddress(address.substrate)\n return {Substrate: normalize ? normalizeSubstrateAddress(address.substrate) : address.substrate}\n } else if (address.hasOwnProperty('Ethereum')) {\n validate.ethereumAddress(address.Ethereum)\n return {Ethereum: normalize ? normalizeEthereumAddress(address.Ethereum) : address.Ethereum}\n } else if (address.hasOwnProperty('ethereum')) {\n validate.ethereumAddress(address.ethereum)\n return {Ethereum: normalize ? normalizeEthereumAddress(address.ethereum) : address.ethereum}\n } else {\n throw new Error(`Address ${address} is not a valid crossAccountId object (should contain \"Substrate\"/\"substrate\" or \"Ethereum\"/\"ethereum\" field)`)\n }\n }\n\n if (typeof address === 'string') {\n if (is.substrateAddress(address)) return {Substrate: normalize ? normalizeSubstrateAddress(address) : address}\n else if (is.ethereumAddress(address)) return {Ethereum: normalize ? normalizeEthereumAddress(address) : address}\n else {\n throw new Error(`Address ${address} is not a valid Substrate or Ethereum address`)\n }\n }\n\n throw new Error(`Address ${address} is not a string or object: ${typeof address}`)\n}\n\nexport const guessAddressAndExtractCrossAccountIdSafe = (address: string | object, normalize: boolean = false): CrossAccountId | null => {\n try {\n return guessAddressAndExtractCrossAccountIdUnsafe(address, normalize)\n } catch {\n return null\n }\n}\n\nexport const substrateOrMirrorIfEthereum = (address: string | object, normalize: boolean = false): string => {\n const addressObject = guessAddressAndExtractCrossAccountIdUnsafe(address, normalize)\n return addressObject.Substrate\n ? addressObject.Substrate\n : mirror.ethereumToSubstrate(addressObject.Ethereum as string)\n}\n\nexport const addressInAnyFormToEnhancedCrossAccountId = (address: string | object, ss58Prefix: number = 42): EnhancedCrossAccountId => {\n const crossAccountId = Address.extract.crossAccountId(address)\n\n if (crossAccountId.Ethereum) {\n const normalized = Address.normalize.ethereumAddress(crossAccountId.Ethereum)\n return {\n ...crossAccountId,\n address: normalized,\n addressSS58: normalized,\n isEthereum: true,\n isSubstrate: false,\n type: 'Ethereum',\n }\n } else {\n return {\n ...crossAccountId,\n address: Address.normalize.substrateAddress(crossAccountId.Substrate as string),\n addressSS58: Address.normalize.substrateAddress(crossAccountId.Substrate as string, ss58Prefix),\n isEthereum: false,\n isSubstrate: true,\n type: 'Substrate',\n }\n }\n}\n","import { Client, Sdk, ExtrinsicResultResponse } from '@unique-nft/sdk'\nimport Extension, { IPolkadotExtensionAccount } from '@unique-nft/utils/extension'\nimport { Address } from '@unique-nft/utils'\n\nimport { amountChainFormat, amountFloatFormat } from './uitls'\n\nexport const SDK_BASE_URLS = {\n opal: 'https://rest.unique.network/opal/v1',\n quartz: 'https://rest.unique.network/quartz/v1',\n unique: 'https://rest.unique.network/unique/v1',\n}\ntype SDK_NETWORK = keyof typeof SDK_BASE_URLS\nconst SDK_NETWORKS = Object.keys(SDK_BASE_URLS) as SDK_NETWORK[]\n\nexport async function getAccountList(): Promise {\n const enablingResult = await Extension.Polkadot.enableAndLoadAllWallets()\n\n if (!enablingResult.info.extensionFound) {\n console.log('Extension.Polkadot not found', Extension.Polkadot)\n throw new Error('Extension not found')\n } else if (!enablingResult.info.accountsFound) {\n throw new Error('No accounts found')\n } else if (enablingResult.info.userHasBlockedAllWallets) {\n throw new Error('All wallets are blocked')\n } else if (enablingResult.info.userHasWalletsButHasNoAccounts) {\n throw new Error('No accounts found. Please, create an account')\n }\n return enablingResult.accounts\n}\n\nexport async function getAccountOrAddress(\n accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string,\n receivedAccounts?: IPolkadotExtensionAccount[],\n): Promise {\n if (!accountOrAccountIdOrAddress) {\n throw new Error('accountOrAccountIdOrAddress parameter in function getAccountOrAddress is empty')\n }\n if (typeof accountOrAccountIdOrAddress === 'object') {\n if (!accountOrAccountIdOrAddress.address) {\n throw new Error('Invalid input parameters')\n }\n return accountOrAccountIdOrAddress\n }\n const accounts = receivedAccounts || (await getAccountList())\n const account = accounts.find(el => el.id === accountOrAccountIdOrAddress)\n if (account) return account\n let isValidAddress = false\n try {\n isValidAddress = Address.validate.substrateAddress(accountOrAccountIdOrAddress)\n } catch (e) {\n //\n }\n if (!isValidAddress) {\n throw new Error('The input parameter is neither an address nor an account id for this wallet')\n }\n return accountOrAccountIdOrAddress\n}\n\nexport async function getAccountById(\n accountId: string,\n accounts?: IPolkadotExtensionAccount[],\n): Promise {\n const account = await getAccountOrAddress(accountId, accounts)\n if (typeof account === 'string') throw new Error('Account not found')\n return account\n}\n\nexport function initSDK(sdkInstanceOrChainNameOrUrl?: Client | string): Client {\n if (!sdkInstanceOrChainNameOrUrl) {\n throw new Error(`sdkInstanceOrChainNameOrUrl parameter in function initSDK is empty`)\n }\n\n if (typeof sdkInstanceOrChainNameOrUrl === 'object') {\n if (!(sdkInstanceOrChainNameOrUrl instanceof Client)) {\n throw new Error(\n `The sdkInstanceOrChainNameOrUrl is not an instance of Sdk: ${typeof sdkInstanceOrChainNameOrUrl}`,\n )\n }\n\n return sdkInstanceOrChainNameOrUrl\n }\n\n if (typeof sdkInstanceOrChainNameOrUrl !== 'string') {\n throw new Error(\n `The sdkInstanceOrChainNameOrUrl is not an object or a string: ${typeof sdkInstanceOrChainNameOrUrl}`,\n )\n }\n\n if (SDK_NETWORKS.includes(sdkInstanceOrChainNameOrUrl as SDK_NETWORK)) {\n console.log(`SDK initialized at ${SDK_BASE_URLS[sdkInstanceOrChainNameOrUrl as SDK_NETWORK]}`)\n return new Sdk({ baseUrl: SDK_BASE_URLS[sdkInstanceOrChainNameOrUrl as SDK_NETWORK] })\n }\n try {\n // check url is valid\n new URL(sdkInstanceOrChainNameOrUrl)\n\n // some warnings about url form\n if (!sdkInstanceOrChainNameOrUrl.startsWith('https://')) {\n console.warn(`The URL does not start with https://.`)\n }\n if (!sdkInstanceOrChainNameOrUrl.endsWith('/v1')) {\n console.warn(`The URL does not end with /v1.`)\n }\n\n console.log(`SDK initialized at ${sdkInstanceOrChainNameOrUrl}`)\n return new Sdk({ baseUrl: sdkInstanceOrChainNameOrUrl })\n } catch (e: any) {\n throw new Error(`The sdkInstanceOrChainNameOrUrl (url) input parameter is of the wrong type: ${e.message}`)\n }\n}\n\nexport async function totalStaked(\n accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string,\n sdkInstanceOrChainNameOrUrl: Client | string,\n): Promise {\n const sdk = initSDK(sdkInstanceOrChainNameOrUrl)\n const accountOrAddress = await getAccountOrAddress(accountOrAccountIdOrAddress)\n const address = typeof accountOrAddress === 'string' ? accountOrAddress : accountOrAddress.address\n\n const result: { human: string, empty: any } = await sdk.stateQuery.execute(\n {\n endpoint: 'rpc',\n module: 'appPromotion',\n method: 'totalStaked',\n },\n { args: [{ Substrate: address } as any] },\n )\n console.log(result)\n if (result.empty) return 0\n return amountFloatFormat(sdk, result.human)\n}\n\nexport async function stakesPerAccount(accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string, sdkInstanceOrChainNameOrUrl: Client | string):\n Promise {\n const sdk = initSDK(sdkInstanceOrChainNameOrUrl)\n const accountOrAddress = await getAccountOrAddress(accountOrAccountIdOrAddress)\n const address = typeof accountOrAddress === 'string' ? accountOrAddress : accountOrAddress.address\n\n const result = await sdk.stateQuery.execute({\n endpoint: 'query',\n module: 'appPromotion',\n method: 'stakesPerAccount',\n },\n {args: [address]}\n )\n return Number(result.human)\n}\n\nconst getLocksSum = async (sdk: Client, address: string, method, ids: string[] = []): Promise => {\n const locks: { human: Array<{id: string, amount: string }>} = await sdk.stateQuery.execute(\n {\n endpoint: 'query',\n module: 'balances',\n method,\n },\n { args: [address] },\n );\n\n return locks.human?.reduce((acc, lock) => {\n return ids.includes(lock.id) ? acc + BigInt(lock.amount.split(',').join('')) : acc;\n }, 0n) || 0n;\n}\n\nexport async function getVestedSum(\n accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string,\n sdkInstanceOrChainNameOrUrl: Client | string,\n): Promise {\n const sdk = initSDK(sdkInstanceOrChainNameOrUrl)\n const accountOrAddress = await getAccountOrAddress(accountOrAccountIdOrAddress)\n const address = typeof accountOrAddress === 'string' ? accountOrAddress : accountOrAddress.address\n\n const vestedSum = await getLocksSum(sdk, address, 'locks', ['ormlvest'])\n console.dir({ vestedSum }, {depth: null});\n\n return amountFloatFormat(sdk, vestedSum.toString());\n}\n\nexport async function getFreeBalance(\n accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string,\n sdkInstanceOrChainNameOrUrl: Client | string,\n): Promise {\n const sdk = initSDK(sdkInstanceOrChainNameOrUrl)\n const accountOrAddress = await getAccountOrAddress(accountOrAccountIdOrAddress)\n const address = typeof accountOrAddress === 'string' ? accountOrAddress : accountOrAddress.address\n\n const { freeBalance } = await sdk.balance.get({ address })\n\n console.dir({ freeBalance }, {depth: null});\n\n return Number(freeBalance.amount);\n}\n\nexport async function amountCanBeStaked(\n accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string,\n sdkInstanceOrChainNameOrUrl: Client | string,\n): Promise {\n const sdk = initSDK(sdkInstanceOrChainNameOrUrl)\n const accountOrAddress = await getAccountOrAddress(accountOrAccountIdOrAddress)\n const address = typeof accountOrAddress === 'string' ? accountOrAddress : accountOrAddress.address\n\n const { freeBalance } = await sdk.balance.get({ address })\n const { decimals } = freeBalance;\n\n const free = BigInt(freeBalance.raw);\n const locksSum = await getLocksSum(sdk, address, 'freezes', ['appstake', 'appstakeappstake'])\n\n const canBeStaked = (free - locksSum);\n\n const formatted = await amountFloatFormat(decimals, canBeStaked.toString());\n\n console.dir({ free, locksSum, canBeStaked, formatted }, {depth: null});\n\n return formatted;\n}\n\nexport async function stake(\n accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string,\n sdkInstanceOrChainNameOrUrl: Client | string,\n initAmount: number | string,\n): Promise & { success: boolean; }> {\n const sdk = initSDK(sdkInstanceOrChainNameOrUrl)\n const account = await getAccountOrAddress(accountOrAccountIdOrAddress)\n if (typeof account === 'string') {\n throw new Error('Failed to get an account')\n }\n\n if (!initAmount) {\n throw new Error('The initAmount input parameter is empty')\n }\n const amount = await amountChainFormat(sdk, initAmount)\n\n const result: any = await sdk.extrinsics.submitWaitResult(\n {\n address: account.address,\n section: 'appPromotion',\n method: 'stake',\n args: [amount],\n },\n account.uniqueSdkSigner,\n )\n if (result.error) return { ...result, success: false }\n\n const chainPropertiesResult = await sdk.common.chainProperties();\n\n return {\n ...result,\n link: `extrinsic/${result.block.header.number}`,\n polkadotLink: `https://polkadot.js.org/apps/?rpc=${chainPropertiesResult.wsUrl}#/explorer/query/${result.block.header.number}`,\n success: true,\n }\n}\n\nexport async function unstake(\n accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string,\n sdkInstanceOrChainNameOrUrl: Client | string\n): Promise & { success: boolean; }> {\n const sdk = initSDK(sdkInstanceOrChainNameOrUrl)\n const account = await getAccountOrAddress(accountOrAccountIdOrAddress)\n if (typeof account === 'string') {\n throw new Error('Failed to get an account')\n }\n\n const result: any = await sdk.extrinsics.submitWaitResult(\n {\n address: account.address,\n section: 'appPromotion',\n method: 'unstakeAll',\n args: [],\n },\n account.uniqueSdkSigner,\n )\n if (result.error) return { ...result, success: false }\n\n const chainPropertiesResult = await sdk.common.chainProperties();\n\n console.log('After the end of week this sum becomes completely free for further use')\n return {\n ...result,\n link: `extrinsic/${result.block.header.number}`,\n polkadotLink: `https://polkadot.js.org/apps/?rpc=${chainPropertiesResult.wsUrl}#/explorer/query/${result.block.header.number}`,\n success: true\n }\n}\n\nexport async function unstakePartial(\n accountOrAccountIdOrAddress: IPolkadotExtensionAccount | string,\n sdkInstanceOrChainNameOrUrl: Client | string,\n initAmount: number | string,\n): Promise & { success: boolean; }> {\n const sdk = initSDK(sdkInstanceOrChainNameOrUrl)\n const account = await getAccountOrAddress(accountOrAccountIdOrAddress)\n if (typeof account === 'string') {\n throw new Error('Failed to get an account')\n }\n\n if (!initAmount) {\n throw new Error('The initAmount input parameter is empty')\n }\n const amount = await amountChainFormat(sdk, initAmount)\n\n const result: any = await sdk.extrinsics.submitWaitResult(\n {\n address: account.address,\n section: 'appPromotion',\n method: 'unstakePartial',\n args: [amount],\n },\n account.uniqueSdkSigner,\n )\n if (result.error) return { ...result, success: false }\n\n const chainPropertiesResult = await sdk.common.chainProperties();\n\n console.log('After the end of week this sum becomes completely free for further use')\n return {\n ...result,\n link: `extrinsic/${result.block.header.number}`,\n polkadotLink: `https://polkadot.js.org/apps/?rpc=${chainPropertiesResult.wsUrl}#/explorer/query/${result.block.header.number}`,\n success: true\n }\n}\n","import Axios from 'axios';\nimport { Coder } from 'abi-coder';\nimport FormData from 'form-data';\nimport { io } from 'socket.io-client';\n\nvar Method = /* @__PURE__ */ ((Method2) => {\n Method2[\"GET\"] = \"GET\";\n Method2[\"POST\"] = \"POST\";\n Method2[\"DELETE\"] = \"DELETE\";\n Method2[\"PATCH\"] = \"PATCH\";\n Method2[\"PUT\"] = \"PUT\";\n return Method2;\n})(Method || {});\n\nclass Section {\n constructor(client) {\n this.client = client;\n this.client.options.baseUrl = this.client.options.baseUrl.replace(/\\/$/, \"\");\n }\n async query(url, params) {\n const response = await this.client.instance({\n method: Method.GET,\n baseURL: this.baseUrl,\n url,\n params\n });\n return response.data;\n }\n async postRequest(url, data, params) {\n const response = await this.client.instance({\n method: Method.POST,\n baseURL: this.baseUrl,\n url,\n data,\n params\n });\n return response.data;\n }\n}\n\nconst isUnsignedTxPayloadResponse = (args) => typeof args === \"object\" && !!args && \"signerPayloadJSON\" in args;\nconst isSubmitTxBody = (args) => isUnsignedTxPayloadResponse(args) && !!args && \"signature\" in args;\nfunction sleep(ms) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nclass Mutation {\n constructor(client, method, path) {\n this.client = client;\n this.method = method;\n this.path = path;\n this.url = `${this.client.options.baseUrl}/${this.path}`;\n }\n async buildBatch(args, options) {\n const response = await this.client.instance({\n method: this.method,\n url: this.url,\n params: __spreadProps(__spreadValues$2({}, options), { use: \"BuildBatch\" }),\n data: args\n });\n return response.data;\n }\n async build(args, options) {\n const response = await this.client.instance({\n method: this.method,\n url: this.url,\n params: __spreadProps(__spreadValues$2({}, options), { use: \"Build\" }),\n data: args\n });\n return response.data;\n }\n async getFee(args) {\n const response = await this.client.instance({\n method: this.method,\n url: this.url,\n params: { use: \"GetFee\" },\n data: args\n });\n return response == null ? void 0 : response.data;\n }\n async sign(args, options) {\n const unsigned = isUnsignedTxPayloadResponse(args) ? args : await this.build(args, options);\n const { signerPayloadJSON } = unsigned;\n const { signature } = await this.client.extrinsics.sign(unsigned, options == null ? void 0 : options.signer);\n return { signature, signerPayloadJSON };\n }\n async submit(args, options) {\n const submitTxArguments = isSubmitTxBody(args) ? args : await this.sign(args, options);\n const response = await this.client.instance({\n method: this.method,\n url: this.url,\n params: __spreadProps(__spreadValues$2({}, options), { use: \"Submit\" }),\n data: submitTxArguments\n });\n return response.data;\n }\n async submitWatch(args, options) {\n const submitTxArguments = isSubmitTxBody(args) ? args : await this.sign(args, options);\n const response = await this.client.instance({\n method: this.method,\n url: this.url,\n params: __spreadProps(__spreadValues$2({}, options), { use: \"SubmitWatch\" }),\n data: submitTxArguments\n });\n return response.data;\n }\n async submitWaitResult(args, options) {\n const { hash } = await this.submitWatch(args, options);\n let checkStatusResult;\n let i = 0;\n while ((!checkStatusResult || !(checkStatusResult == null ? void 0 : checkStatusResult.isCompleted)) && i <= this.client.params.maximumNumberOfStatusRequests) {\n i += 1;\n checkStatusResult = await this.client.extrinsics.status({ hash });\n if (checkStatusResult.isCompleted || checkStatusResult.error) {\n return checkStatusResult;\n }\n await sleep(this.client.params.waitBetweenStatusRequestsInMs);\n }\n throw new Error();\n }\n}\n\nclass Balance extends Section {\n constructor() {\n super(...arguments);\n this.path = \"balance\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.transfer = new Mutation(this.client, Method.POST, `${this.path}/transfer`);\n this.get = (args) => this.query(\"\", args);\n }\n}\n\nclass Chain extends Section {\n constructor() {\n super(...arguments);\n this.path = \"chain\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.properties = () => this.query(\"properties\");\n }\n}\n\nclass Collections extends Section {\n constructor() {\n super(...arguments);\n this.path = \"collections\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.setProperties = new Mutation(this.client, Method.POST, `${this.path}/properties`);\n this.deleteProperties = new Mutation(this.client, Method.DELETE, `${this.path}/properties`);\n this.setPropertyPermissions = new Mutation(this.client, Method.POST, `${this.path}/property-permissions`);\n this.properties = (args) => this.query(\"properties\", args);\n this.tokens = (args) => this.query(\"tokens\", args);\n this.propertyPermissions = (args) => this.query(\"property-permissions\", args);\n this.creation = new Mutation(this.client, Method.POST, this.path);\n this.getLimits = (args) => this.query(\"limits\", args);\n this.setLimits = new Mutation(this.client, Method.POST, `${this.path}/set-limits`);\n this.get = (args) => this.query(\"\", args);\n this.transfer = new Mutation(this.client, Method.PATCH, `${this.path}/transfer`);\n this.destroy = new Mutation(this.client, Method.DELETE, this.path);\n this.stats = () => this.query(\"stats\");\n this.setTransfersEnabled = new Mutation(this.client, Method.POST, `${this.path}/transfers-enabled`);\n this.setPermissions = new Mutation(this.client, Method.POST, `${this.path}/permissions`);\n this.nextSponsored = (args) => this.query(\"next-sponsored\", args);\n this.lastTokenId = (args) => this.query(\"last-token-id\", args);\n this.allowList = (args) => this.query(\"allow-list\", args);\n this.allowed = (args) => this.query(\"allowed\", args);\n this.addToAllowList = new Mutation(this.client, Method.POST, `${this.path}/add-allow-list`);\n this.removeFromAllowList = new Mutation(this.client, Method.POST, `${this.path}/remove-from-allow-list`);\n this.admins = (args) => this.query(\"admins\", args);\n this.addAdmin = new Mutation(this.client, Method.POST, `${this.path}/admins`);\n this.removeAdmin = new Mutation(this.client, Method.DELETE, `${this.path}/admins`);\n this.setSponsorship = new Mutation(this.client, Method.POST, `${this.path}/sponsorship`);\n this.confirmSponsorship = new Mutation(this.client, Method.POST, `${this.path}/sponsorship/confirm`);\n this.removeSponsorship = new Mutation(this.client, Method.DELETE, `${this.path}/sponsorship`);\n this.totalSupply = ({\n collectionId\n }) => this.query(\"total-supply\", { collectionId });\n }\n}\n\nclass ERC721 extends Section {\n constructor() {\n super(...arguments);\n this.path = \"erc721\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.createCollection = new Mutation(this.client, Method.POST, `${this.path}/collection`);\n this.createToken = new Mutation(this.client, Method.POST, `${this.path}/token`);\n }\n}\n\nconst parseEvmEvents = (events, abi) => {\n const erc20Coder = new Coder(abi);\n const parsedEvents = [];\n const unknownEvents = [];\n events.filter((event) => event.section === \"evm\" && event.method === \"Log\").forEach((event) => {\n const logData = event.data[0];\n const { topics, data } = logData;\n try {\n const decoded = erc20Coder.decodeEvent(topics, data);\n parsedEvents.push({\n name: decoded.name,\n values: decoded.values\n });\n } catch (err) {\n unknownEvents.push({\n topics,\n data\n });\n }\n });\n return {\n parsedEvents,\n unknownEvents\n };\n};\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nclass ContractSendMutation extends Mutation {\n constructor(client, method, path, contract) {\n super(client, method, path);\n this.contract = contract;\n }\n async build(args) {\n return super.build(__spreadValues$1({\n contractAddress: this.contract.contractAddress,\n abi: this.contract.abi\n }, args));\n }\n async submitWaitResult(args) {\n const result = await super.submitWaitResult(args);\n const { parsedEvents, unknownEvents } = parseEvmEvents(result.events, this.contract.abi);\n result.parsed.parsedEvents = parsedEvents;\n result.parsed.unknownEvents = unknownEvents;\n return result;\n }\n}\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nclass Contract extends Section {\n constructor(client, contractAddress, abi) {\n super(client);\n this.contractAddress = contractAddress;\n this.abi = abi;\n this.path = \"evm\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.send = new ContractSendMutation(this.client, Method.POST, `${this.path}/send`, this);\n }\n async call(args) {\n const response = await this.client.instance({\n method: Method.POST,\n baseURL: this.baseUrl,\n url: \"call\",\n data: __spreadValues({\n contractAddress: this.contractAddress,\n abi: this.abi\n }, args)\n });\n return response.data;\n }\n}\n\nclass Evm extends Section {\n constructor() {\n super(...arguments);\n this.path = \"evm\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.send = new Mutation(this.client, Method.POST, `${this.path}/send`);\n this.contractExists = (args) => this.query(\"contract-exists\", args);\n this.call = (args) => this.postRequest(\"call\", args);\n }\n async contractConnect(contractAddress, abi) {\n const { exists } = await this.contractExists({ contractAddress });\n if (!exists) {\n throw new Error(\"Contract is not exists\");\n }\n return new Contract(this.client, contractAddress, abi);\n }\n}\n\nclass Extrinsics extends Section {\n constructor() {\n super(...arguments);\n this.path = \"extrinsic\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n }\n async build(args) {\n const response = await this.client.instance({\n method: Method.POST,\n baseURL: this.baseUrl,\n url: \"build\",\n data: args\n });\n return response.data;\n }\n async getFee(args) {\n const response = await this.client.instance({\n method: Method.POST,\n baseURL: this.baseUrl,\n url: \"calculate-fee\",\n data: args\n });\n return response.data;\n }\n async sign(args, signer = this.client.options.signer) {\n if (!signer)\n throw new Error(`No signer provided`);\n return signer.sign(args);\n }\n async submit(args) {\n const response = await this.client.instance({\n method: Method.POST,\n baseURL: this.baseUrl,\n url: \"submit\",\n data: args\n });\n return response.data;\n }\n async submitWatch(args, signer = this.client.options.signer) {\n const txBuild = await this.client.extrinsics.build(args);\n const signedTxPayload = await this.client.extrinsics.sign(txBuild, signer);\n const submitTxResult = await this.client.extrinsics.submit({\n signerPayloadJSON: txBuild.signerPayloadJSON,\n signature: signedTxPayload.signature\n });\n return submitTxResult;\n }\n async submitWaitResult(args, signer = this.client.options.signer) {\n const { hash } = await this.client.extrinsics.submitWatch(args, signer);\n let checkStatusResult;\n let i = 0;\n while ((!checkStatusResult || !(checkStatusResult == null ? void 0 : checkStatusResult.isCompleted)) && i <= this.client.params.maximumNumberOfStatusRequests) {\n i += 1;\n checkStatusResult = await this.client.extrinsics.status({ hash });\n if (checkStatusResult.isCompleted || checkStatusResult.error) {\n return checkStatusResult;\n }\n await sleep(this.client.params.waitBetweenStatusRequestsInMs);\n }\n throw new Error();\n }\n async status(args) {\n const response = await this.client.instance({\n method: Method.GET,\n baseURL: this.baseUrl,\n url: \"status\",\n params: args\n });\n return response.data;\n }\n async get(args) {\n const response = await this.client.instance({\n method: Method.GET,\n baseURL: this.baseUrl,\n url: \"\",\n params: args\n });\n return response.data;\n }\n}\n\nclass Fungible extends Section {\n constructor() {\n super(...arguments);\n this.path = \"fungible\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.transfer = new Mutation(this.client, Method.POST, `${this.path}/transfer`);\n this.getCollection = (args) => this.query(\"collection\", args);\n this.burn = new Mutation(this.client, Method.DELETE, this.path);\n this.createCollection = new Mutation(this.client, Method.POST, `${this.path}/collection`);\n this.getBalance = (args) => this.query(\"balance\", args);\n this.addTokens = new Mutation(this.client, Method.POST, `${this.path}/tokens`);\n this.transferTokens = new Mutation(this.client, Method.POST, `${this.path}/tokens/transfer`);\n this.approveTokens = new Mutation(this.client, Method.POST, `${this.path}/tokens/approve`);\n this.allowanceTokens = (args) => this.query(\"tokens/allowance\", args);\n this.totalPieces = (args) => this.query(\"total-pieces\", args);\n }\n}\n\nclass Refungible extends Section {\n constructor() {\n super(...arguments);\n this.path = \"refungible\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.getCollection = (args) => this.query(\"collection\", args);\n this.burn = new Mutation(this.client, Method.DELETE, this.path);\n this.getBalance = (args) => this.query(\"tokens/balance\", args);\n this.createCollection = new Mutation(this.client, Method.POST, `${this.path}/collection`);\n this.createToken = new Mutation(this.client, Method.POST, `${this.path}/tokens`);\n this.transferToken = new Mutation(this.client, Method.POST, `${this.path}/tokens/transfer`);\n this.approveToken = new Mutation(this.client, Method.POST, `${this.path}/tokens/approve`);\n this.allowanceToken = (args) => this.query(\"tokens/allowance\", args);\n this.repartitionToken = new Mutation(this.client, Method.POST, `${this.path}/tokens/repartition`);\n this.totalPieces = (args) => this.query(\"tokens/total-pieces\", args);\n this.accountTokens = (args) => this.query(\"tokens/account-tokens\", args);\n }\n}\n\nconst isFileLike = (input) => Object.hasOwnProperty.call(input, \"content\");\nclass Ipfs extends Section {\n constructor() {\n super(...arguments);\n this.path = \"ipfs\";\n this.headers = { \"Content-Type\": `multipart/form-data` };\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n }\n async uploadFile({ file }) {\n const data = new FormData();\n data.append(\"file\", file, \"file\");\n const response = await this.client.instance({\n method: Method.POST,\n url: `${this.baseUrl}/upload-file`,\n data,\n headers: this.headers\n });\n return response.data;\n }\n async uploadFiles({\n files\n }) {\n const data = Ipfs.filesToFormData(files);\n const response = await this.client.instance({\n method: Method.POST,\n url: `${this.baseUrl}/upload-files`,\n data,\n headers: this.headers\n });\n return response.data;\n }\n async addFiles({\n cid,\n files\n }) {\n const data = Ipfs.filesToFormData(files);\n data.append(\"cid\", cid);\n const response = await this.client.instance({\n method: Method.PATCH,\n url: `${this.baseUrl}/add-files`,\n data,\n headers: this.headers\n });\n return response.data;\n }\n async uploadZip({ file }) {\n const form = new FormData();\n form.append(\"file\", file, \"file\");\n const response = await this.client.instance({\n method: Method.POST,\n url: `${this.baseUrl}/upload-zip`,\n data: form,\n headers: {\n \"Content-Type\": `multipart/form-data`\n }\n });\n return response.data;\n }\n static filesToFormData(files) {\n const formData = new FormData();\n files.forEach((file) => {\n formData.append(\"files\", isFileLike(file) ? file.content : file, file.name);\n });\n return formData;\n }\n}\n\nclass Tokens extends Section {\n constructor() {\n super(...arguments);\n this.path = \"tokens\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.setProperties = new Mutation(this.client, Method.POST, `${this.path}/properties`);\n this.deleteProperties = new Mutation(this.client, Method.DELETE, `${this.path}/properties`);\n this.properties = (args) => this.query(\"properties\", args);\n this.create = new Mutation(this.client, Method.POST, this.path);\n this.createMultiple = new Mutation(this.client, Method.POST, `${this.path}/create-multiple`);\n this.accountTokens = (args) => this.query(\"account-tokens\", args);\n this.get = (args) => this.query(\"\", args);\n this.exists = (args) => this.query(\"exists\", args);\n this.children = (args) => this.query(\"children\", args);\n this.parent = (args) => this.query(\"parent\", args);\n this.owner = (args) => this.query(\"owner\", args);\n this.topmostOwner = (args) => this.query(\"topmost-owner\", args);\n this.nest = new Mutation(this.client, Method.POST, `${this.path}/nest`);\n this.unnest = new Mutation(this.client, Method.POST, `${this.path}/unnest`);\n this.burn = new Mutation(this.client, Method.DELETE, this.path);\n this.transfer = new Mutation(this.client, Method.PATCH, `${this.path}/transfer`);\n this.approve = new Mutation(this.client, Method.POST, `${this.path}/approve`);\n this.allowance = (args) => this.query(\"allowance\", args);\n this.isBundle = (args) => this.query(\"is-bundle\", args);\n this.getBundle = (args) => this.query(\"get-bundle\", args);\n this.balance = (args) => this.query(\"balance\", args);\n }\n}\n\nclass ApiError extends Error {\n constructor(responseError) {\n super(responseError.message);\n this.code = responseError.code;\n this.name = responseError.name;\n this.details = responseError.details;\n }\n}\n\nvar version = \"0.2.5\";\n\nclass Common extends Section {\n constructor() {\n super(...arguments);\n this.path = \"common\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n this.chainProperties = () => this.query(\"chain-properties\");\n this.getNonce = (args) => this.query(\"nonce\", args);\n }\n}\n\nclass StateQueries extends Section {\n constructor() {\n super(...arguments);\n this.path = \"query\";\n this.baseUrl = `${this.client.options.baseUrl}/${this.path}`;\n }\n async get(args) {\n const { endpoint, module, method } = args;\n const url = `${endpoint}/${module}/${method}`;\n const response = await this.client.instance({\n method: Method.GET,\n baseURL: this.baseUrl,\n url\n });\n return response.data;\n }\n async execute(params, body) {\n const { endpoint, module, method } = params;\n const url = `${endpoint}/${module}/${method}`;\n const response = await this.client.instance({\n method: Method.POST,\n baseURL: this.baseUrl,\n url,\n data: body || {}\n });\n return response.data;\n }\n}\n\nclass SocketClient {\n constructor(socket) {\n this.socket = socket;\n }\n on(event, listener) {\n this.socket.on(event, listener);\n }\n subscribeHeaders() {\n this.socket.emit(\"subscribe:headers\");\n return this;\n }\n subscribeBlocks() {\n this.socket.emit(\"subscribe:blocks\");\n return this;\n }\n subscribeExtrinsics(filter) {\n this.socket.emit(\"subscribe:extrinsics\", filter);\n return this;\n }\n subscribeEvents(filter) {\n this.socket.emit(\"subscribe:events\", filter);\n return this;\n }\n}\n\nclass Subscriptions {\n constructor(client) {\n this.client = client;\n }\n connect(secondary) {\n const options = {\n path: secondary ? `/${secondary}/socket.io` : \"/socket.io\"\n };\n const socket = io(this.client.options.baseUrl, options);\n return new SocketClient(socket);\n }\n}\n\nclass Client {\n constructor(options) {\n this.options = options;\n this.chain = new Chain(this);\n this.common = new Common(this);\n this.extrinsics = new Extrinsics(this);\n this.balance = new Balance(this);\n this.fungible = new Fungible(this);\n this.refungible = new Refungible(this);\n this.collections = new Collections(this);\n this.tokens = new Tokens(this);\n this.erc721 = new ERC721(this);\n this.ipfs = new Ipfs(this);\n this.evm = new Evm(this);\n this.stateQuery = new StateQueries(this);\n this.subscriptions = new Subscriptions(this);\n this.defaults = {\n baseUrl: \"\"\n };\n this.options.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n this.params = {\n maximumNumberOfStatusRequests: this.options.maximumNumberOfStatusRequests || 5,\n waitBetweenStatusRequestsInMs: this.options.waitBetweenStatusRequestsInMs || 5e3\n };\n this.instance = Axios.create({\n baseURL: this.options.baseUrl,\n maxContentLength: Infinity,\n maxBodyLength: Infinity\n });\n this.instance.interceptors.response.use((response) => response, (exception) => {\n var _a, _b;\n const err = (_b = (_a = exception.response) == null ? void 0 : _a.data) == null ? void 0 : _b.error;\n throw err && typeof err === \"object\" ? new ApiError(err) : exception;\n });\n {\n this.instance.defaults.headers.common[\"X-SDK-Version\"] = version;\n }\n }\n}\nconst Sdk = Client;\n\nexport { Client, Method, Sdk };\n","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nexport default encodePacket;\n","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","export const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n","import { globalThisShim as globalThis } from \"./globalThis.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = setTimeout.bind(globalThis);\n obj.clearTimeoutFn = clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.readyState = \"\";\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @api protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n *\n * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n return this;\n }\n /**\n * Closes the transport.\n *\n * @api public\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api public\n */\n send(packets) {\n if (\"open\" === this.readyState) {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @api protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @api protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @api protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @api protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n /**\n * Transport name.\n */\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this.polling || !this.writable) {\n let total = 0;\n if (this.polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @api public\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n onData(data) {\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this.poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @api private\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\n this.data = undefined !== opts.data ? opts.data : null;\n this.create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n create() {\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this.data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this.onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @api private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @api private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n this.xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this.xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n this.xhr = null;\n }\n /**\n * Called upon load.\n *\n * @api private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this.cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @api public\n */\n abort() {\n this.cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Transport name.\n *\n * @api public\n */\n get name() {\n return \"websocket\";\n }\n /**\n * Opens socket.\n *\n * @api private\n */\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @api private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = closeEvent => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent\n });\n this.ws.onmessage = ev => this.onData(ev.data);\n this.ws.onerror = e => this.onError(\"websocket error\", e);\n }\n /**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\n */\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, data => {\n // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n /**\n * Closes socket.\n *\n * @api private\n */\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling\n};\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses an URI\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","import { transports } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} opts - options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this.beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\", {\n description: \"network connection lost\"\n });\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", reason => this.onClose(\"transport close\", reason));\n }\n /**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", msg => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @api private\n */\n onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this.onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @api private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this.resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @api private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @api private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @api private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this.getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n getWritablePackets() {\n const shouldCheckPayloadSize = this.maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this.maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n *\n * @api public\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @api private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @api private\n */\n onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this.pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport const protocol = Socket.protocol;\nexport { Transport } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\nexport { nextTick } from \"./transports/websocket-constructor.js\";\n","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return typeof payload === \"object\";\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || typeof payload === \"object\";\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return Array.isArray(payload) && payload.length > 0;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n }\n else if (this.connected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n const timeout = this.flags.timeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n this.acks[id] = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, [null, ...args]);\n };\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this.packet({ type: PacketType.CONNECT, data });\n });\n }\n else {\n this.packet({ type: PacketType.CONNECT, data: this.auth });\n }\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n const id = packet.data.sid;\n this.onconnect(id);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id) {\n this.id = id;\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on(socket, \"error\", (err) => {\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n socket.close();\n // @ts-ignore\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n","import { Client } from '@unique-nft/sdk'\n\ntype SdkOrDecimals = Client | number;\n\nasync function getDecimals(sdkOrDecimals: SdkOrDecimals): Promise {\n if (typeof sdkOrDecimals === 'number') return sdkOrDecimals\n\n return (await sdkOrDecimals.common.chainProperties()).decimals\n}\n\nexport async function amountChainFormat(sdkOrDecimals: SdkOrDecimals, initAmount: number | string): Promise {\n const decimals = await getDecimals(sdkOrDecimals)\n\n const amountInitString = typeof initAmount === 'number' ? initAmount.toString() : initAmount\n const arr = amountInitString.split('.')\n let amount = arr[0] !== '0' ? arr[0] : ''\n if (arr[1]) {\n amount +=\n arr[1] +\n Array(decimals - arr[1].length)\n .fill('0')\n .join('')\n } else {\n amount += Array(decimals).fill('0').join('')\n }\n return amount\n}\n\nexport async function amountFloatFormat(sdkOrDecimals: SdkOrDecimals, initAmount: string): Promise {\n const decimals = await getDecimals(sdkOrDecimals)\n\n const amountAsString = initAmount.replace(/[^0-9]/g, \"\").padStart(decimals + 1, '0');\n\n const integerPart = amountAsString.slice(0, -decimals);\n const decimalPart = amountAsString.slice(-decimals);\n\n return parseFloat(`${integerPart}.${decimalPart}`);\n}"],"mappings":"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","names":["require_bind","__commonJSMin","exports","module","fn","thisArg","args","i","require_utils","__commonJSMin","exports","module","bind","toString","kindOf","cache","thing","str","kindOfTest","type","isArray","val","isUndefined","isBuffer","isArrayBuffer","isArrayBufferView","result","isString","isNumber","isObject","isPlainObject","prototype","isDate","isFile","isBlob","isFileList","isFunction","isStream","isFormData","pattern","isURLSearchParams","trim","isStandardBrowserEnv","forEach","obj","fn","i","l","key","merge","assignValue","extend","a","b","thisArg","stripBOM","content","inherits","constructor","superConstructor","props","descriptors","toFlatObject","sourceObj","destObj","filter","prop","merged","endsWith","searchString","position","lastIndex","toArray","arr","isTypedArray","TypedArray","require_buildURL","__commonJSMin","exports","module","utils","encode","val","url","params","paramsSerializer","serializedParams","parts","key","v","hashmarkIndex","require_InterceptorManager","__commonJSMin","exports","module","utils","InterceptorManager","fulfilled","rejected","options","id","fn","h","require_normalizeHeaderName","__commonJSMin","exports","module","utils","headers","normalizedName","value","name","require_AxiosError","__commonJSMin","exports","module","utils","AxiosError","message","code","config","request","response","prototype","descriptors","error","customProps","axiosError","obj","require_transitional","__commonJSMin","exports","module","require_toFormData","__commonJSMin","exports","module","utils","toFormData","obj","formData","stack","convertValue","value","build","data","parentKey","key","fullKey","arr","el","require_settle","__commonJSMin","exports","module","AxiosError","resolve","reject","response","validateStatus","require_cookies","__commonJSMin","exports","module","utils","name","value","expires","path","domain","secure","cookie","match","require_isAbsoluteURL","__commonJSMin","exports","module","url","require_combineURLs","__commonJSMin","exports","module","baseURL","relativeURL","require_buildFullPath","__commonJSMin","exports","module","isAbsoluteURL","combineURLs","baseURL","requestedURL","require_parseHeaders","__commonJSMin","exports","module","utils","ignoreDuplicateOf","headers","parsed","key","val","i","line","require_isURLSameOrigin","__commonJSMin","exports","module","utils","msie","urlParsingNode","originURL","resolveURL","url","href","requestURL","parsed","require_CanceledError","__commonJSMin","exports","module","AxiosError","utils","CanceledError","message","require_parseProtocol","__commonJSMin","exports","module","url","match","require_xhr","__commonJSMin","exports","module","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","transitionalDefaults","AxiosError","CanceledError","parseProtocol","config","resolve","reject","requestData","requestHeaders","responseType","onCanceled","done","request","username","password","fullPath","onloadend","responseHeaders","responseData","response","value","err","timeoutErrorMessage","transitional","xsrfValue","val","key","cancel","protocol","require_null","__commonJSMin","exports","module","require_defaults","__commonJSMin","exports","module","utils","normalizeHeaderName","AxiosError","transitionalDefaults","toFormData","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","headers","value","getDefaultAdapter","adapter","stringifySafely","rawValue","parser","encoder","e","defaults","data","isObjectPayload","contentType","isFileList","_FormData","transitional","silentJSONParsing","forcedJSONParsing","strictJSONParsing","status","method","require_transformData","__commonJSMin","exports","module","utils","defaults","data","headers","fns","context","fn","require_isCancel","__commonJSMin","exports","module","value","require_dispatchRequest","__commonJSMin","exports","module","utils","transformData","isCancel","defaults","CanceledError","throwIfCancellationRequested","config","method","adapter","response","reason","require_mergeConfig","__commonJSMin","exports","module","utils","config1","config2","config","getMergedValue","target","source","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","merge","configValue","require_data","__commonJSMin","exports","module","require_validator","__commonJSMin","exports","module","VERSION","AxiosError","validators","type","i","thing","deprecatedWarnings","validator","version","message","formatMessage","opt","desc","value","opts","assertOptions","options","schema","allowUnknown","keys","result","require_Axios","__commonJSMin","exports","module","utils","buildURL","InterceptorManager","dispatchRequest","mergeConfig","buildFullPath","validator","validators","Axios","instanceConfig","configOrUrl","config","transitional","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","newConfig","onFulfilled","onRejected","error","fullPath","method","url","generateHTTPMethod","isForm","data","require_CancelToken","__commonJSMin","exports","module","CanceledError","CancelToken","executor","resolvePromise","resolve","token","cancel","l","onfulfilled","_resolve","promise","message","listener","index","c","require_spread","__commonJSMin","exports","module","callback","arr","require_isAxiosError","__commonJSMin","exports","module","utils","payload","require_axios","__commonJSMin","exports","module","utils","bind","Axios","mergeConfig","defaults","createInstance","defaultConfig","context","instance","instanceConfig","axios","promises","require_axios","__commonJSMin","exports","module","require_bn","__commonJSMin","exports","module","assert","val","msg","inherits","ctor","superCtor","TempCtor","BN","number","base","endian","Buffer","num","left","right","start","i","j","off","parseHex4Bits","string","index","c","parseHexByte","lowerBound","r","w","parseLength","parseBase","str","end","mul","b","len","limbLen","limbPow","total","mod","word","pow","dest","move","src","size","inspect","zeros","groupSizes","groupBases","padding","out","carry","groupSize","groupBase","ret","length","allocate","ArrayType","byteLength","reqLength","res","postfix","position","shift","t","hi","toBitArray","bit","wbit","width","a","bytesNeeded","bitsLeft","cmp","smallMulTo","self","lo","k","ncarry","rword","maxJ","comb10MulTo","o","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","FFTM","x","y","N","l","rb","rbt","rws","iws","rtws","itws","s","rtwdf","itwdf","p","rtwdf_","itwdf_","re","ie","ro","io","rx","n","m","odd","ws","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","isNegNum","q","bits","carryMask","newCarry","hint","extended","h","mask","maskedWords","mode","bhi","bhiBits","diff","qj","positive","div","dm","half","r2","acc","A","B","C","D","g","yp","xp","im","jm","x1","x2","delta","negative","Red","ctx","primes","MPrime","name","tmp","rlen","input","K256","output","outLen","prev","next","P224","P192","P25519","prime","mod3","one","nOne","lpow","z","inv","windowSize","wnd","current","currentLen","Mont","u","version","init_version","__esmMin","_checkNormalize","missing","form","error","_permanentCensorErrors","_censorErrors","LogLevels","_logLevel","_globalLogger","_normalizeError","LogLevel","ErrorCode","HEX","Logger","init_lib","__esmMin","init_version","version","logLevel","args","level","message","code","params","messageDetails","key","value","hex","i","reason","url","fault","name","condition","count","expectedCount","target","kind","censorship","permanent","version","init_version","__esmMin","isHexable","value","addSlice","array","args","isInteger","isBytes","i","v","arrayify","options","logger","result","isHexString","hex","concat","items","objects","item","length","accum","offset","object","hexlify","HexCharacters","hexDataSlice","data","endOffset","hexConcat","hexZeroPad","init_lib","__esmMin","init_version","Logger","version","version","init_version","__esmMin","toHex","value","logger","toBigNumber","BigNumber","toBN","hex","BN","throwFault","fault","operation","params","Logger","_base36To16","import_bn","_constructorGuard","MAX_SAFE","_warnedToStringRadix","init_bignumber","__esmMin","init_lib","init_version","_BN","version","constructorGuard","other","key","anyValue","isBytes","hexlify","isHexString","init_lib","__esmMin","init_bignumber","version","init_version","__esmMin","defineReadOnly","object","name","value","getStatic","ctor","key","i","_isFrozen","opaque","keys","logger","_deepCopy","item","deepCopy","result","Description","init_lib","__esmMin","init_version","Logger","version","info","version","init_version","__esmMin","checkModifier","type","name","ModifiersBytes","ModifiersNest","logger","parseParamType","param","allowIndexed","originalParam","throwError","i","newNode","parent","node","c","verifyType","child","sibling","populate","object","params","key","defineReadOnly","parseParams","value","allowIndex","splitNesting","ParamType","parseGas","comps","BigNumber","parseModifiers","modifier","verifyState","result","checkForbidden","fragment","sig","verifyIdentifier","regexIdentifier","accum","depth","offset","_constructorGuard","FormatTypes","paramTypeArray","Fragment","EventFragment","ConstructorFragment","FunctionFragment","ErrorFragment","regexParen","init_fragments","__esmMin","init_lib","init_version","Logger","version","constructorGuard","match","format","comp","ParamTypify","input","anonymous","state","parens","output","returns","checkResultErrors","result","errors","checkErrors","path","object","key","childPath","error","logger","Coder","Writer","Reader","init_abstract_coder","__esmMin","init_lib","init_version","Logger","version","name","type","localName","dynamic","message","value","wordSize","defineReadOnly","hexConcat","data","writer","concat","bytes","arrayify","paddingOffset","BigNumber","offset","coerceFunc","allowLoose","hexlify","match","length","loose","alignedLength","require_sha3","__commonJSMin","exports","module","INPUT_ERROR","FINALIZE_ERROR","WINDOW","root","WEB_WORKER","NODE_JS","COMMON_JS","AMD","ARRAY_BUFFER","HEX_CHARS","SHAKE_PADDING","CSHAKE_PADDING","KECCAK_PADDING","PADDING","SHIFT","RC","BITS","SHAKE_BITS","OUTPUT_TYPES","CSHAKE_BYTEPAD","obj","createOutputMethod","bits","padding","outputType","message","Keccak","createShakeOutputMethod","outputBits","createCshakeOutputMethod","n","s","methods","createKmacOutputMethod","key","createOutputMethods","method","createMethod","i","type","createShakeMethod","createCshakeMethod","w","createKmacMethod","Kmac","algorithms","methodNames","algorithm","j","methodName","newMethodName","notString","blocks","byteCount","length","blockCount","index","code","f","x","right","o","bytes","str","strs","paddingBytes","zeros","outputBlocks","extraBytes","hex","block","buffer","array","offset","h","l","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","lib_exports","__export","keccak256","data","sha3","arrayify","import_js_sha3","init_lib","__esmMin","version","init_version","__esmMin","getChecksumAddress","address","isHexString","logger","chars","expanded","hashed","arrayify","keccak256","log10","x","ibanChecksum","c","ibanLookup","safeDigits","block","checksum","getAddress","result","_base36To16","MAX_SAFE_INTEGER","init_lib","__esmMin","init_version","Logger","version","i","AddressCoder","init_address","__esmMin","init_lib","init_abstract_coder","Coder","localName","writer","value","getAddress","error","reader","hexZeroPad","AnonymousCoder","init_anonymous","__esmMin","init_abstract_coder","Coder","coder","writer","value","reader","pack","writer","coders","values","arrayValues","unique","coder","name","logger","Logger","staticWriter","Writer","dynamicWriter","updateFuncs","index","value","dynamicOffset","updateFunc","baseOffset","func","length","unpack","reader","baseReader","offset","offsetReader","error","uniqueNames","accum","i","ArrayCoder","init_array","__esmMin","init_lib","init_version","init_abstract_coder","init_anonymous","version","Coder","localName","type","dynamic","defaultChild","result","count","AnonymousCoder","BooleanCoder","init_boolean","__esmMin","init_abstract_coder","Coder","localName","writer","value","reader","DynamicBytesCoder","BytesCoder","init_bytes","__esmMin","init_lib","init_abstract_coder","Coder","type","localName","writer","value","arrayify","length","reader","hexlify","FixedBytesCoder","init_fixed_bytes","__esmMin","init_lib","init_abstract_coder","Coder","size","localName","name","writer","value","data","arrayify","reader","hexlify","NullCoder","init_null","__esmMin","init_abstract_coder","Coder","localName","writer","value","reader","NegativeOne","Zero","One","MaxUint256","init_bignumbers","__esmMin","init_lib","BigNumber","HashZero","init_hashes","__esmMin","init_lib","__esmMin","init_bignumbers","init_hashes","NumberCoder","init_number","__esmMin","init_lib","init_abstract_coder","Coder","size","signed","localName","name","writer","value","v","BigNumber","maxUintValue","MaxUint256","bounds","One","NegativeOne","Zero","reader","version","init_version","__esmMin","errorFunc","reason","offset","bytes","output","badCodepoint","logger","ignoreFunc","Utf8ErrorReason","i","o","replaceFunc","getUtf8CodePoints","onError","Utf8ErrorFuncs","arrayify","result","c","extraLength","overlongMask","res","j","nextChar","toUtf8Bytes","str","form","UnicodeNormalizationForm","c2","pair","escapeChar","value","hex","_toEscapedUtf8String","codePoint","_toUtf8String","codePoints","toUtf8String","toUtf8CodePoints","init_utf8","__esmMin","init_lib","init_version","Logger","version","formatBytes32String","text","bytes","toUtf8Bytes","hexlify","concat","HashZero","parseBytes32String","data","arrayify","length","toUtf8String","init_bytes32","__esmMin","init_lib","init_utf8","bytes2","data","result","i","createTable","func","value","lo","pair","comps","createRangeTable","hi","v","matchMap","ranges","range","flatten","values","accum","_nameprepTableA1","codepoint","Table_A_1_ranges","_nameprepTableB2","Table_B_2_ranges","codes","Table_B_2_lut_abs","shift","Table_B_2_lut_rel","complex","Table_B_2_complex","_nameprepTableC","Table_C_ranges","nameprep","toUtf8CodePoints","code","Table_B_1_flags","codesTableB2","_toUtf8String","UnicodeNormalizationForm","name","init_idna","__esmMin","init_utf8","lib_exports","__export","UnicodeNormalizationForm","Utf8ErrorFuncs","Utf8ErrorReason","_toEscapedUtf8String","formatBytes32String","nameprep","parseBytes32String","toUtf8Bytes","toUtf8CodePoints","toUtf8String","init_lib","__esmMin","init_bytes32","init_idna","init_utf8","StringCoder","init_string","__esmMin","init_lib","init_bytes","DynamicBytesCoder","localName","writer","value","toUtf8Bytes","reader","toUtf8String","TupleCoder","init_tuple","__esmMin","init_abstract_coder","init_array","Coder","coders","localName","dynamic","types","coder","type","values","uniqueNames","accum","name","index","writer","value","pack","reader","unpack","logger","paramTypeBytes","paramTypeNumber","AbiCoder","defaultAbiCoder","init_abi_coder","__esmMin","init_lib","init_version","init_abstract_coder","init_address","init_array","init_boolean","init_bytes","init_fixed_bytes","init_null","init_number","init_string","init_tuple","init_fragments","Logger","version","coerceFunc","defineReadOnly","param","AddressCoder","BooleanCoder","StringCoder","BytesCoder","ArrayCoder","TupleCoder","component","NullCoder","match","size","NumberCoder","FixedBytesCoder","data","allowLoose","Reader","Writer","types","coders","type","ParamType","values","coder","writer","loose","arrayify","id","text","keccak256","toUtf8Bytes","init_id","__esmMin","init_lib","init_lib","__esmMin","init_id","wrapAccessError","property","error","wrap","logger","LogDescription","TransactionDescription","ErrorDescription","Indexed","BuiltinErrors","Interface","init_interface","__esmMin","init_lib","init_abi_coder","init_abstract_coder","init_fragments","init_version","Logger","version","Description","value","fragments","abi","defineReadOnly","fragment","Fragment","getStatic","bucket","signature","ConstructorFragment","format","FormatTypes","j","defaultAbiCoder","address","getAddress","hexDataSlice","id","eventFragment","nameOrSignatureOrSighash","isHexString","name","matching","f","result","FunctionFragment","nameOrSignatureOrTopic","topichash","EventFragment","getSighash","params","data","values","bytes","arrayify","hexlify","concat","functionFragment","reason","message","errorArgs","errorName","errorSignature","selector","builtin","topics","encodeTopic","param","keccak256","BigNumber","hexZeroPad","index","dataTypes","dataValues","topicHash","indexed","nonIndexed","dynamic","ParamType","resultIndexed","resultNonIndexed","nonIndexedIndex","indexedIndex","i","tx","log","hexData","lib_exports","__export","AbiCoder","ConstructorFragment","ErrorFragment","EventFragment","FormatTypes","Fragment","FunctionFragment","Indexed","Interface","LogDescription","ParamType","TransactionDescription","checkResultErrors","defaultAbiCoder","init_lib","__esmMin","init_fragments","init_abi_coder","init_interface","abi_1","keccak256_1","strings_1","Coder","abi","name","func","jsonInputs","inputs","input","signature","hash","sha3","event","data","constructor","result","values","toValueMap","topics","dataTopics","topicInputs","topicResult","index","topic","params","param","dataInputs","dataResult","topicIndex","dataIndex","_i","inputs_1","selector","calldata","jsonOutputs","outputs","output","valueMap","toValues","eventSignature","eventTopic","i","value","__spreadArray","argumentString","argumentData","inputData","item","functions","funcSelector","events","types","inputs_2","tupleString","arrayArityString","type","typeString","functionSignature","exports","require_browser","__commonJSMin","exports","module","ExtensionTools_exports","__export","Ethereum","ExtensionTools","Polkadot","ExtensionTools_default","module","__toCommonJS","documentReadyPromiseAndWindowIsOk","resolve","windowIsOkSync","chainNameToChainId","chainIdToChainName","isUniqueChainFactory","chainName","currentChainIs","chainId","getOrRequestAccounts","requestInsteadOfGet","error","ethereum","accounts","_error","chainIdStr","addChainToExtension","chainData","UNIQUE_CHAINS_DATA_FOR_EXTENSIONS","addChain","switchToChain","parsedChainId","switchChainTo","subscribeOnChanges","cb","getAccounts","reason","address","parseEthersTxReceipt","tx","options","events","event","index","args","key","acc","rawValue","value","elem","rawPrice","priceStr","price","IPFS_GATEWAY","KNOWN_POLKADOT_EXTENSIONS","FALLBACK_WALLET_LOGO_IPFS_CID","compareTwoStrings","a","b","knownPolkadotExtensions","name","info","isWeb3Environment","injectedWeb3","getWalletInfo","walletName","nonInjectedWallet","isEnabled","prettyName","logo","listWallets","wallets","injectedWallet","wallet","loadWalletByName","rawWallet","walletInfo","account","addressShort","id","accountName","accountType","signRaw","payloadRaw","payload","signPayload","payloadJSON","uniqueSdkSigner","unsignedTxPayload","signatureResult","e","loadWallets","onlyEnabled","allWallets","rejectedWallets","w","require_src","__commonJSMin","exports","module","base","ALPHABET","BASE_MAP","j","i","x","xc","BASE","LEADER","FACTOR","iFACTOR","encode","source","zeroes","length","pbegin","pend","size","b58","carry","it1","it2","str","decodeUnsafe","psz","b256","it3","it4","vch","decode","string","buffer","number","n","exports","bool","b","bytes","lengths","hash","exists","instance","checkFinished","output","out","min","assert","U32_MASK64","_32n","fromBig","n","le","exports","split","lst","Ah","Al","h","l","toBig","shrSH","s","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","rotr32H","rotr32L","rotlSH","rotlSL","rotlBH","rotlBL","add","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","u64","exports","crypto_1","u8","arr","exports","u32","createView","rotr","word","shift","hexes","v","i","bytesToHex","uint8a","hex","hexToBytes","array","j","hexByte","byte","nextTick","asyncLoop","iters","tick","cb","ts","diff","utf8ToBytes","str","toBytes","data","concatBytes","arrays","a","length","result","pad","Hash","isPlainObject","obj","checkOpts","defaults","opts","wrapConstructor","hashConstructor","hashC","message","tmp","wrapConstructorWithOpts","hashCons","msg","randomBytes","bytesLength","_assert_js_1","_u64_js_1","utils_js_1","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_0n","_1n","_2n","_7n","_256n","_0x71n","round","R","x","y","t","j","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","h","l","s","rotlL","keccakP","rounds","B","idx1","idx0","B0","B1","Th","Tl","curH","curL","shift","PI","exports","Keccak","blockLen","suffix","outputLen","enableXOF","data","state","len","pos","take","i","out","bufferOut","bytes","to","gen","genShake","opts","_assert_js_1","utils_js_1","exports","BLAKE2","blockLen","outputLen","opts","keyLen","saltLen","persLen","data","buffer","buffer32","len","pos","take","dataOffset","data32","pos32","out","out32","v","i","res","to","length","finished","destroyed","_blake2_js_1","_u64_js_1","utils_js_1","IV","BUF","G1","a","b","c","d","msg","x","Xl","Xh","Al","Ah","Bl","Bh","Cl","Ch","Dl","Dh","ll","G2","BLAKE2b","opts","keyLength","salt","pers","tmp","v0l","v0h","v1l","v1h","v2l","v2h","v3l","v3h","v4l","v4h","v5l","v5h","v6l","v6h","v7l","v7h","offset","isLast","v","i","h","l","j","s","exports","utf_helpers_exports","__export","HexString","Utf16","Utf8","UtfHelpers","module","__toCommonJS","bytes","str","byte","hexString","u8a","offset","start","c1","c2","i","diff","end","t","t2","arr","len","c","u16arr","cp","s","src_exports","__export","Address_exports","StringUtils_exports","constants_exports","module","__toCommonJS","Address","imports_exports","collection","compare","extract","is","mirror","nesting","normalize","substrate","validate","COLLECTION_ADDRESS_PREFIX","NESTING_PREFIX","STATIC_ADDRESSES","base58","base64","import_base_x","basex","import_blake2b","import_sha3","__toESM","BASE58_ALPHABET","BASE64_ALPHABET","DWORDHexString","import_utf_helpers","num","n","s","unsafeNormalizeEthereumAddress","address","addr","addressHash","checksumAddress","normalizeEthereumAddress","compareEthereumAddresses","address1","address2","addr1","addr2","collectionIdToEthAddress","collectionId","ethAddressToCollectionId","collectionIdAndTokenIdToNestingAddress","tokenId","nestingAddressToCollectionIdAndTokenId","blake2AsU8a","u8a","dkLen","u8aConcat","u8as","offset","length","result","SS58_PREFIX","sshash","data","checkAddressChecksum","decoded","ignoreChecksum","ss58Length","ss58Decoded","isPublicKey","isValid","hash","normalizeSubstrateAddress","prefix","encodeSubstrateAddress","decodeSubstrateAddress","key","ss58Format","allowedDecodedLengths","u8aPrefix","input","realError","allowedEncodedLengths","endPos","publicKey","hex","error","compareSubstrateAddresses","decoded1","decoded2","addressToEvm","truncated","EVM_PREFIX_U8A","evmToAddress","evmAddress","message","guessAddressAndExtractCrossAccountIdUnsafe","rawAddress","guessAddressAndExtractCrossAccountIdSafe","substrateOrMirrorIfEthereum","addressObject","addressInAnyFormToEnhancedCrossAccountId","ss58Prefix","crossAccountId","normalized","ETH_ADDRESS_REGEX","obj","addressOrCrossAccountId","addressInAnyForm","main_exports","__export","SDK_BASE_URLS","amountCanBeStaked","getAccountById","getAccountList","getAccountOrAddress","getFreeBalance","getVestedSum","initSDK","stake","stakesPerAccount","totalStaked","unstake","unstakePartial","import_axios","import_abi_coder","import_form_data","PACKET_TYPES","PACKET_TYPES_REVERSE","key","ERROR_PACKET","withNativeBlob","withNativeArrayBuffer","isView","obj","encodePacket","type","data","supportsBinary","callback","encodeBlobAsBase64","PACKET_TYPES","fileReader","content","encodePacket_browser_default","chars","lookup","i","decode","base64","bufferLength","len","i","p","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","lookup","withNativeArrayBuffer","decodePacket","encodedPacket","binaryType","mapBinary","type","decodeBase64Packet","PACKET_TYPES_REVERSE","ERROR_PACKET","data","decoded","decode","decodePacket_browser_default","SEPARATOR","encodePayload","packets","callback","length","encodedPackets","count","packet","i","encodePacket_browser_default","encodedPacket","decodePayload","encodedPayload","binaryType","decodedPacket","decodePacket_browser_default","protocol","Emitter","obj","mixin","key","event","fn","on","callbacks","cb","args","i","len","globalThisShim","pick","obj","attr","acc","k","NATIVE_SET_TIMEOUT","NATIVE_CLEAR_TIMEOUT","installTimerFunctions","opts","globalThisShim","BASE64_OVERHEAD","byteLength","utf8Length","str","c","length","i","l","TransportError","reason","description","context","Transport","Emitter","opts","installTimerFunctions","packets","data","packet","decodePacket_browser_default","details","alphabet","length","map","seed","i","prev","encode","num","encoded","yeast","now","encode","prev","seed","i","length","map","alphabet","encode","obj","str","i","decode","qs","qry","pairs","l","pair","value","hasCORS","XHR","opts","xdomain","hasCORS","globalThisShim","empty","hasXHR2","XHR","Polling","Transport","opts","isSSL","port","forceBase64","onPause","pause","total","data","callback","packet","decodePayload","close","packets","encodePayload","query","schema","yeast","encodedQuery","encode","ipv6","Request","fn","req","xhrStatus","context","Emitter","uri","installTimerFunctions","pick","xhr","i","e","err","fromError","unloadHandler","terminationEvent","globalThisShim","nextTick","cb","setTimeoutFn","WebSocket","globalThisShim","usingBrowserWebSocket","defaultBinaryType","isReactNative","WS","Transport","opts","uri","protocols","pick","usingBrowserWebSocket","WebSocket","err","defaultBinaryType","closeEvent","ev","e","packets","i","packet","lastPacket","encodePacket_browser_default","data","nextTick","query","schema","port","yeast","encodedQuery","encode","ipv6","transports","WS","Polling","re","parts","parse","str","src","b","e","m","uri","i","pathNames","queryKey","obj","path","regx","names","query","data","$0","$1","$2","Socket","Emitter","uri","opts","parse","installTimerFunctions","decode","name","query","protocol","transports","transport","reason","failed","onTransportOpen","msg","cleanup","err","freezeTransport","onerror","error","onTransportClose","onclose","onupgrade","to","i","l","packet","data","packets","payloadSize","byteLength","options","fn","type","close","cleanupAndClose","waitForUpgrade","description","upgrades","filteredUpgrades","j","protocol","Socket","url","uri","path","loc","obj","parse","host","esm_exports","__export","Decoder","Encoder","PacketType","protocol","withNativeArrayBuffer","isView","obj","toString","withNativeBlob","withNativeFile","isBinary","hasBinary","toJSON","i","l","key","deconstructPacket","packet","buffers","packetData","pack","_deconstructPacket","data","isBinary","placeholder","newData","i","key","reconstructPacket","_reconstructPacket","protocol","PacketType","Encoder","replacer","obj","hasBinary","str","deconstruction","deconstructPacket","pack","buffers","Decoder","Emitter","reviver","packet","isBinaryEvent","BinaryReconstructor","isBinary","i","p","start","buf","next","c","payload","type","binData","reconstructPacket","on","obj","ev","fn","RESERVED_EVENTS","Socket","Emitter","io","nsp","opts","on","args","ev","packet","PacketType","id","ack","isTransportWritable","timeout","timer","i","data","err","reason","description","listeners","listener","self","sent","subDestroy","compress","Backoff","opts","ms","rand","deviation","min","max","jitter","Manager","Emitter","uri","opts","_a","installTimerFunctions","Backoff","_parser","esm_exports","v","fn","Socket","socket","self","openSubDestroy","on","errorSub","err","timeout","timer","data","packet","nextTick","nsp","nsps","encodedPackets","i","subDestroy","reason","description","delay","attempt","cache","lookup","uri","opts","parsed","url","source","id","path","sameNamespace","newConnection","io","Manager","Socket","Method","Method2","Section","client","url","params","data","isUnsignedTxPayloadResponse","args","isSubmitTxBody","sleep","ms","resolve","__defProp$2","__defProps","__getOwnPropDescs","__getOwnPropSymbols$2","__hasOwnProp$2","__propIsEnum$2","__defNormalProp$2","obj","key","value","__spreadValues$2","a","b","prop","__spreadProps","Mutation","method","path","options","response","unsigned","signerPayloadJSON","signature","submitTxArguments","hash","checkStatusResult","i","Balance","Chain","Collections","collectionId","ERC721","parseEvmEvents","events","abi","erc20Coder","parsedEvents","unknownEvents","event","logData","topics","decoded","__defProp$1","__getOwnPropSymbols$1","__hasOwnProp$1","__propIsEnum$1","__defNormalProp$1","__spreadValues$1","ContractSendMutation","contract","result","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","Contract","contractAddress","Evm","exists","Extrinsics","signer","txBuild","signedTxPayload","Fungible","Refungible","isFileLike","input","Ipfs","file","FormData","files","cid","form","formData","Tokens","ApiError","responseError","version","Common","StateQueries","endpoint","module","body","SocketClient","socket","listener","filter","Subscriptions","secondary","lookup","Client","Axios","exception","_a","_b","err","Sdk","import_extension","import_utils","getDecimals","sdkOrDecimals","amountChainFormat","initAmount","decimals","arr","amount","amountFloatFormat","amountAsString","integerPart","decimalPart","SDK_BASE_URLS","SDK_NETWORKS","getAccountList","enablingResult","Extension","getAccountOrAddress","accountOrAccountIdOrAddress","receivedAccounts","account","el","isValidAddress","getAccountById","accountId","accounts","initSDK","sdkInstanceOrChainNameOrUrl","Client","Sdk","e","totalStaked","sdk","accountOrAddress","address","result","amountFloatFormat","stakesPerAccount","getLocksSum","method","ids","acc","lock","getVestedSum","vestedSum","getFreeBalance","freeBalance","amountCanBeStaked","decimals","free","locksSum","canBeStaked","formatted","stake","initAmount","amount","amountChainFormat","chainPropertiesResult","unstake","unstakePartial"]}