{"version":3,"file":"index.iife.min.js","sources":["../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js","../node_modules/.pnpm/@noble+hashes@1.6.0/node_modules/@noble/hashes/esm/_assert.js","../node_modules/.pnpm/@noble+hashes@1.6.0/node_modules/@noble/hashes/esm/crypto.js","../node_modules/.pnpm/@noble+hashes@1.6.0/node_modules/@noble/hashes/esm/utils.js","../node_modules/.pnpm/@noble+hashes@1.6.0/node_modules/@noble/hashes/esm/_md.js","../node_modules/.pnpm/@noble+hashes@1.6.0/node_modules/@noble/hashes/esm/_u64.js","../node_modules/.pnpm/@noble+hashes@1.6.0/node_modules/@noble/hashes/esm/sha512.js","../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/esm/abstract/utils.js","../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/esm/abstract/modular.js","../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/esm/abstract/curve.js","../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/esm/abstract/edwards.js","../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/esm/ed25519.js","../src/utils/ed25519.ts","../src/utils/to-buffer.ts","../node_modules/.pnpm/bn.js@5.2.1/node_modules/bn.js/lib/bn.js","../node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js","../node_modules/.pnpm/base-x@3.0.11/node_modules/base-x/src/index.js","../node_modules/.pnpm/bs58@4.0.1/node_modules/bs58/index.js","../node_modules/.pnpm/@noble+hashes@1.6.1/node_modules/@noble/hashes/esm/_assert.js","../node_modules/.pnpm/@noble+hashes@1.6.1/node_modules/@noble/hashes/esm/utils.js","../node_modules/.pnpm/@noble+hashes@1.6.1/node_modules/@noble/hashes/esm/_md.js","../node_modules/.pnpm/@noble+hashes@1.6.1/node_modules/@noble/hashes/esm/sha256.js","../node_modules/.pnpm/text-encoding-utf-8@1.0.2/node_modules/text-encoding-utf-8/lib/encoding.lib.js","../node_modules/.pnpm/borsh@0.7.0/node_modules/borsh/lib/index.js","../src/utils/borsh-schema.ts","../src/publickey.ts","../src/account.ts","../src/bpf-loader-deprecated.ts","../node_modules/.pnpm/@solana+buffer-layout@4.0.1/node_modules/@solana/buffer-layout/lib/Layout.js","../src/transaction/constants.ts","../src/transaction/expiry-custom-errors.ts","../src/message/account-keys.ts","../src/layout.ts","../src/utils/shortvec-encoding.ts","../src/utils/assert.ts","../src/message/compiled-keys.ts","../src/utils/guarded-array-utils.ts","../src/message/legacy.ts","../src/message/v0.ts","../src/message/versioned.ts","../src/transaction/legacy.ts","../src/transaction/message.ts","../src/transaction/versioned.ts","../src/timing.ts","../src/sysvar.ts","../src/errors.ts","../src/utils/send-and-confirm-transaction.ts","../src/utils/sleep.ts","../src/instruction.ts","../src/fee-calculator.ts","../src/nonce-account.ts","../node_modules/.pnpm/@solana+errors@2.1.0_typescript@5.6.3/node_modules/@solana/errors/dist/index.browser.mjs","../node_modules/.pnpm/@solana+codecs-core@2.1.0_typescript@5.6.3/node_modules/@solana/codecs-core/dist/index.browser.mjs","../node_modules/.pnpm/@solana+codecs-numbers@2.1.0_typescript@5.6.3/node_modules/@solana/codecs-numbers/dist/index.browser.mjs","../src/utils/bigint.ts","../src/programs/system.ts","../src/loader.ts","../src/bpf-loader.ts","../node_modules/.pnpm/fast-stable-stringify@1.0.0/node_modules/fast-stable-stringify/index.js","../node_modules/.pnpm/superstruct@2.0.2/node_modules/superstruct/dist/index.mjs","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/rng.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/regex.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/validate.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/v1.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/parse.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/v35.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/md5.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/v3.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/v4.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/sha1.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/v5.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/nil.js","../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/version.js","../node_modules/.pnpm/jayson@4.1.3_bufferutil@4.0.8_utf-8-validate@5.0.10/node_modules/jayson/lib/generateRequest.js","../node_modules/.pnpm/jayson@4.1.3_bufferutil@4.0.8_utf-8-validate@5.0.10/node_modules/jayson/lib/client/browser/index.js","../src/epoch-schedule.ts","../src/__forks__/browser/fetch-impl.ts","../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","../node_modules/.pnpm/rpc-websockets@9.0.4/node_modules/rpc-websockets/dist/index.browser.mjs","../src/rpc-websocket.ts","../src/account-data.ts","../src/programs/address-lookup-table/state.ts","../src/utils/makeWebsocketUrl.ts","../src/connection.ts","../src/keypair.ts","../src/programs/address-lookup-table/index.ts","../src/programs/compute-budget.ts","../src/programs/ed25519.ts","../node_modules/.pnpm/@noble+hashes@1.6.1/node_modules/@noble/hashes/esm/_u64.js","../node_modules/.pnpm/@noble+hashes@1.6.1/node_modules/@noble/hashes/esm/sha3.js","../node_modules/.pnpm/@noble+hashes@1.6.0/node_modules/@noble/hashes/esm/sha256.js","../node_modules/.pnpm/@noble+hashes@1.6.0/node_modules/@noble/hashes/esm/hmac.js","../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/esm/abstract/weierstrass.js","../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/esm/_shortw_utils.js","../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/esm/secp256k1.js","../src/utils/secp256k1.ts","../src/programs/secp256k1.ts","../src/programs/stake.ts","../src/programs/vote.ts","../src/validator-info.ts","../src/vote-account.ts","../src/utils/cluster.ts","../src/utils/send-and-confirm-raw-transaction.ts","../src/index.ts"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n// copied from utils\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction aoutput(out, instance) {\n abytes(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}\nexport { anumber, anumber as number, abytes, abytes as bytes, ahash, aexists, aoutput };\nconst assert = {\n number: anumber,\n bytes: abytes,\n hash: ahash,\n exists: aexists,\n output: aoutput,\n};\nexport default assert;\n//# sourceMappingURL=_assert.js.map","export const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word, shift) => (word << shift) | ((word >>> (32 - shift)) >>> 0);\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n// The byte swap operation for uint32\nexport const byteSwap = (word) => ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n) => n : (n) => byteSwap(n);\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n}\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\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)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('utf8ToBytes expected string, got ' + typeof str);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return crypto.randomBytes(bytesLength);\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","import { aexists, aoutput } from './_assert.js';\nimport { Hash, createView, toBytes } from './utils.js';\n/**\n * Polyfill for Safari 14\n */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/**\n * Choice: a ? b : c\n */\nexport const Chi = (a, b, c) => (a & b) ^ (~a & c);\n/**\n * Majority function, true if any two inputs is true\n */\nexport const Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n const { view, buffer, blockLen } = 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 // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\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) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n//# sourceMappingURL=_md.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// BigUint64Array is too slow as per 2024, so we implement it using Uint32Array.\n// TODO: re-check https://issues.chromium.org/issues/42212588\nfunction fromBig(n, le = false) {\n if (le)\n 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}\nfunction split(lst, 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}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\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.\nfunction add(Ah, Al, Bh, Bl) {\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, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };\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//# sourceMappingURL=_u64.js.map","import { HashMD } from './_md.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends HashMD {\n constructor() {\n super(128, 64, 16, false);\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x6a09e667 | 0;\n this.Al = 0xf3bcc908 | 0;\n this.Bh = 0xbb67ae85 | 0;\n this.Bl = 0x84caa73b | 0;\n this.Ch = 0x3c6ef372 | 0;\n this.Cl = 0xfe94f82b | 0;\n this.Dh = 0xa54ff53a | 0;\n this.Dl = 0x5f1d36f1 | 0;\n this.Eh = 0x510e527f | 0;\n this.El = 0xade682d1 | 0;\n this.Fh = 0x9b05688c | 0;\n this.Fl = 0x2b3e6c1f | 0;\n this.Gh = 0x1f83d9ab | 0;\n this.Gl = 0xfb41bd6b | 0;\n this.Hh = 0x5be0cd19 | 0;\n this.Hl = 0x137e2179 | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy() {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexport class SHA512_224 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x8c3d37c8 | 0;\n this.Al = 0x19544da2 | 0;\n this.Bh = 0x73e19966 | 0;\n this.Bl = 0x89dcd4d6 | 0;\n this.Ch = 0x1dfab7ae | 0;\n this.Cl = 0x32ff9c82 | 0;\n this.Dh = 0x679dd514 | 0;\n this.Dl = 0x582f9fcf | 0;\n this.Eh = 0x0f6d2b69 | 0;\n this.El = 0x7bd44da8 | 0;\n this.Fh = 0x77e36f73 | 0;\n this.Fl = 0x04c48942 | 0;\n this.Gh = 0x3f9d85a8 | 0;\n this.Gl = 0x6a1d36c8 | 0;\n this.Hh = 0x1112e6ad | 0;\n this.Hl = 0x91d692a1 | 0;\n this.outputLen = 28;\n }\n}\nexport class SHA512_256 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0x22312194 | 0;\n this.Al = 0xfc2bf72c | 0;\n this.Bh = 0x9f555fa3 | 0;\n this.Bl = 0xc84c64c2 | 0;\n this.Ch = 0x2393b86b | 0;\n this.Cl = 0x6f53b151 | 0;\n this.Dh = 0x96387719 | 0;\n this.Dl = 0x5940eabd | 0;\n this.Eh = 0x96283ee2 | 0;\n this.El = 0xa88effe3 | 0;\n this.Fh = 0xbe5e1e25 | 0;\n this.Fl = 0x53863992 | 0;\n this.Gh = 0x2b0199fc | 0;\n this.Gl = 0x2c85b8aa | 0;\n this.Hh = 0x0eb72ddc | 0;\n this.Hl = 0x81c52ca2 | 0;\n this.outputLen = 32;\n }\n}\nexport class SHA384 extends SHA512 {\n constructor() {\n super();\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = 0xcbbb9d5d | 0;\n this.Al = 0xc1059ed8 | 0;\n this.Bh = 0x629a292a | 0;\n this.Bl = 0x367cd507 | 0;\n this.Ch = 0x9159015a | 0;\n this.Cl = 0x3070dd17 | 0;\n this.Dh = 0x152fecd8 | 0;\n this.Dl = 0xf70e5939 | 0;\n this.Eh = 0x67332667 | 0;\n this.El = 0xffc00b31 | 0;\n this.Fh = 0x8eb44a87 | 0;\n this.Fl = 0x68581511 | 0;\n this.Gh = 0xdb0c2e0d | 0;\n this.Gl = 0x64f98fa7 | 0;\n this.Hh = 0x47b5481d | 0;\n this.Hl = 0xbefa4fa4 | 0;\n this.outputLen = 48;\n }\n}\nexport const sha512 = /* @__PURE__ */ wrapConstructor(() => new SHA512());\nexport const sha512_224 = /* @__PURE__ */ wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = /* @__PURE__ */ wrapConstructor(() => new SHA512_256());\nexport const sha384 = /* @__PURE__ */ wrapConstructor(() => new SHA384());\n//# sourceMappingURL=sha512.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\nexport function abytes(item) {\n if (!isBytes(item))\n throw new Error('Uint8Array expected');\n}\nexport function abool(title, value) {\n if (typeof value !== 'boolean')\n throw new Error(title + ' boolean expected, got ' + value);\n}\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nexport function numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\nexport function hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes) {\n abytes(bytes);\n return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\nexport function numberToBytesBE(n, len) {\n return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n, len) {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n) {\n return hexToBytes(numberToHexUnpadded(n));\n}\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title, hex, expectedLength) {\n let res;\n if (typeof hex === 'string') {\n try {\n res = hexToBytes(hex);\n }\n catch (e) {\n throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n }\n }\n else if (isBytes(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex);\n }\n else {\n throw new Error(title + ' must be hex string or Uint8Array');\n }\n const len = res.length;\n if (typeof expectedLength === 'number' && len !== expectedLength)\n throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n return res;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n// Is positive bigint\nconst isPosBig = (n) => typeof n === 'bigint' && _0n <= n;\nexport function inRange(n, min, max) {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title, n, min, max) {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n// Bit operations\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n) {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1)\n ;\n return len;\n}\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n, pos) {\n return (n >> BigInt(pos)) & _1n;\n}\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n, pos, value) {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n) => (_2n << BigInt(n - 1)) - _1n;\n// DRBG\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr) => Uint8Array.from(arr); // another shortcut\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg(hashLen, qByteLen, hmacFn) {\n if (typeof hashLen !== 'number' || hashLen < 2)\n throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2)\n throw new Error('qByteLen must be a number');\n if (typeof hmacFn !== 'function')\n throw new Error('hmacFn must be a function');\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n const reseed = (seed = u8n()) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0)\n return;\n k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= 1000)\n throw new Error('drbg: tried 1000 values');\n let len = 0;\n const out = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes(...out);\n };\n const genUntil = (seed, pred) => {\n reset();\n reseed(seed); // Steps D-G\n let res = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen())))\n reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n// Validating curves and fields\nconst validatorFns = {\n bigint: (val) => typeof val === 'bigint',\n function: (val) => typeof val === 'function',\n boolean: (val) => typeof val === 'boolean',\n string: (val) => typeof val === 'string',\n stringOrUint8Array: (val) => typeof val === 'string' || isBytes(val),\n isSafeInteger: (val) => Number.isSafeInteger(val),\n array: (val) => Array.isArray(val),\n field: (val, object) => object.Fp.isValid(val),\n hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n};\n// type Record = { [P in K]: T; }\nexport function validateObject(object, validators, optValidators = {}) {\n const checkField = (fieldName, type, isOptional) => {\n const checkVal = validatorFns[type];\n if (typeof checkVal !== 'function')\n throw new Error('invalid validator function');\n const val = object[fieldName];\n if (isOptional && val === undefined)\n return;\n if (!checkVal(val, object)) {\n throw new Error('param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val);\n }\n };\n for (const [fieldName, type] of Object.entries(validators))\n checkField(fieldName, type, false);\n for (const [fieldName, type] of Object.entries(optValidators))\n checkField(fieldName, type, true);\n return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n/**\n * throws not implemented error\n */\nexport const notImplemented = () => {\n throw new Error('not implemented');\n};\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized(fn) {\n const map = new WeakMap();\n return (arg, ...args) => {\n const val = map.get(arg);\n if (val !== undefined)\n return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n//# sourceMappingURL=utils.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport { bitMask, bytesToNumberBE, bytesToNumberLE, ensureBytes, numberToBytesBE, numberToBytesLE, validateObject, } from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _8n = /* @__PURE__ */ BigInt(8);\n// prettier-ignore\nconst _9n = /* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16);\n// Calculates a modulo b\nexport function mod(a, b) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num, power, modulo) {\n if (power < _0n)\n throw new Error('invalid exponent, negatives unsupported');\n if (modulo <= _0n)\n throw new Error('invalid modulus');\n if (modulo === _1n)\n return _0n;\n let res = _1n;\n while (power > _0n) {\n if (power & _1n)\n res = (res * num) % modulo;\n num = (num * num) % modulo;\n power >>= _1n;\n }\n return res;\n}\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x, power, modulo) {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n// Inverses number over modulo\nexport function invert(number, modulo) {\n if (number === _0n)\n throw new Error('invert: expected non-zero number');\n if (modulo <= _0n)\n throw new Error('invert: expected positive modulus, got ' + modulo);\n // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P) {\n // Legendre constant: used to calculate Legendre symbol (a | p),\n // which denotes the value of a^((p-1)/2) (mod p).\n // (a | p) ≡ 1 if a is a square (mod p)\n // (a | p) ≡ -1 if a is not a square (mod p)\n // (a | p) ≡ 0 if a ≡ 0 (mod p)\n const legendreC = (P - _1n) / _2n;\n let Q, S, Z;\n // Step 1: By factoring out powers of 2 from p - 1,\n // find q and s such that p - 1 = q*(2^s) with q odd\n for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++)\n ;\n // Step 2: Select a non-square z such that (z | p) ≡ -1 and set c ≡ zq\n for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++) {\n // Crash instead of infinity loop, we cannot reasonable count until P.\n if (Z > 1000)\n throw new Error('Cannot find square root: likely non-prime P');\n }\n // Fast-path\n if (S === 1) {\n const p1div4 = (P + _1n) / _4n;\n return function tonelliFast(Fp, n) {\n const root = Fp.pow(n, p1div4);\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // Slow-path\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp, n) {\n // Step 0: Check that n is indeed a square: (n | p) should not be ≡ -1\n if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE))\n throw new Error('Cannot find square root');\n let r = S;\n // TODO: will fail at Fp2/etc\n let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n let x = Fp.pow(n, Q1div2); // first guess at the square root\n let b = Fp.pow(n, Q); // first guess at the fudge factor\n while (!Fp.eql(b, Fp.ONE)) {\n if (Fp.eql(b, Fp.ZERO))\n return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n // Find m such b^(2^m)==1\n let m = 1;\n for (let t2 = Fp.sqr(b); m < r; m++) {\n if (Fp.eql(t2, Fp.ONE))\n break;\n t2 = Fp.sqr(t2); // t2 *= t2\n }\n // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n g = Fp.sqr(ge); // g = ge * ge\n x = Fp.mul(x, ge); // x *= ge\n b = Fp.mul(b, g); // b *= g\n r = m;\n }\n return x;\n };\n}\nexport function FpSqrt(P) {\n // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n // P ≡ 3 (mod 4)\n // √n = n^((P+1)/4)\n if (P % _4n === _3n) {\n // Not all roots possible!\n // const ORDER =\n // 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n // const NUM = 72057594037927816n;\n const p1div4 = (P + _1n) / _4n;\n return function sqrt3mod4(Fp, n) {\n const root = Fp.pow(n, p1div4);\n // Throw if root**2 != n\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // Atkin algorithm for q ≡ 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n if (P % _8n === _5n) {\n const c1 = (P - _5n) / _8n;\n return function sqrt5mod8(Fp, n) {\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, c1);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // P ≡ 9 (mod 16)\n if (P % _16n === _9n) {\n // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n // Means we cannot use sqrt for constants at all!\n //\n // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n // const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n // const c3 = Fp.sqrt(Fp.negate(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n // const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n // sqrt = (x) => {\n // let tv1 = Fp.pow(x, c4); // 1. tv1 = x^c4\n // let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1\n // const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1\n // let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1\n // const e1 = Fp.equals(Fp.square(tv2), x); // 5. e1 = (tv2^2) == x\n // const e2 = Fp.equals(Fp.square(tv3), x); // 6. e2 = (tv3^2) == x\n // tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n // tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n // const e3 = Fp.equals(Fp.square(tv2), x); // 9. e3 = (tv2^2) == x\n // return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n // }\n }\n // Other cases: Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n;\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n];\nexport function validateField(field) {\n const initial = {\n ORDER: 'bigint',\n MASK: 'bigint',\n BYTES: 'isSafeInteger',\n BITS: 'isSafeInteger',\n };\n const opts = FIELD_FIELDS.reduce((map, val) => {\n map[val] = 'function';\n return map;\n }, initial);\n return validateObject(field, opts);\n}\n// Generic field functions\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow(f, num, power) {\n // Should have same speed as pow for bigints\n // TODO: benchmark!\n if (power < _0n)\n throw new Error('invalid exponent, negatives unsupported');\n if (power === _0n)\n return f.ONE;\n if (power === _1n)\n return num;\n let p = f.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n)\n p = f.mul(p, d);\n d = f.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch(f, nums) {\n const tmp = new Array(nums.length);\n // Walk from first to last, multiply them by each other MOD p\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (f.is0(num))\n return acc;\n tmp[i] = acc;\n return f.mul(acc, num);\n }, f.ONE);\n // Invert last element\n const inverted = f.inv(lastMultiplied);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (f.is0(num))\n return acc;\n tmp[i] = f.mul(acc, tmp[i]);\n return f.mul(acc, num);\n }, inverted);\n return tmp;\n}\nexport function FpDiv(f, lhs, rhs) {\n return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\nexport function FpLegendre(order) {\n // (a | p) ≡ 1 if a is a square (mod p), quadratic residue\n // (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue\n // (a | p) ≡ 0 if a ≡ 0 (mod p)\n const legendreConst = (order - _1n) / _2n; // Integer arithmetic\n return (f, x) => f.pow(x, legendreConst);\n}\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(f) {\n const legendre = FpLegendre(f.ORDER);\n return (x) => {\n const p = legendre(f, x);\n return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n };\n}\n// CURVE.n lengths\nexport function nLength(n, nBitLength) {\n // Bit size, byte size of CURVE.n\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * NOTE: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you doing.\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(ORDER, bitLen, isLE = false, redef = {}) {\n if (ORDER <= _0n)\n throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n if (BYTES > 2048)\n throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n let sqrtP; // cached sqrtP\n const f = Object.freeze({\n ORDER,\n BITS,\n BYTES,\n MASK: bitMask(BITS),\n ZERO: _0n,\n ONE: _1n,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error('invalid field element: expected bigint, got ' + typeof num);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n isOdd: (num) => (num & _1n) === _1n,\n neg: (num) => mod(-num, ORDER),\n eql: (lhs, rhs) => lhs === rhs,\n sqr: (num) => mod(num * num, ORDER),\n add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n pow: (num, power) => FpPow(f, num, power),\n div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n // Same as above, but doesn't normalize\n sqrN: (num) => num * num,\n addN: (lhs, rhs) => lhs + rhs,\n subN: (lhs, rhs) => lhs - rhs,\n mulN: (lhs, rhs) => lhs * rhs,\n inv: (num) => invert(num, ORDER),\n sqrt: redef.sqrt ||\n ((n) => {\n if (!sqrtP)\n sqrtP = FpSqrt(ORDER);\n return sqrtP(f, n);\n }),\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // TODO: do we really need constant cmov?\n // We don't have const-time bigints anyway, so probably will be not very useful\n cmov: (a, b, c) => (c ? b : a),\n toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n fromBytes: (bytes) => {\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n },\n });\n return Object.freeze(f);\n}\nexport function FpSqrtOdd(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\nexport function FpSqrtEven(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(hash, groupOrder, isLE = false) {\n hash = ensureBytes('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error('hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen);\n const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder) {\n if (typeof fieldOrder !== 'bigint')\n throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder) {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key, fieldOrder, isLE = false) {\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n const reduced = mod(num, fieldOrder - _1n) + _1n;\n return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n//# sourceMappingURL=modular.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { validateField, nLength } from './modular.js';\nimport { validateObject, bitLen } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nfunction constTimeNegate(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\nfunction validateW(W, bits) {\n if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\nfunction calcWOpts(W, bits) {\n validateW(W, bits);\n const windows = Math.ceil(bits / W) + 1; // +1, because\n const windowSize = 2 ** (W - 1); // -1 because we skip zero\n return { windows, windowSize };\n}\nfunction validateMSMPoints(points, c) {\n if (!Array.isArray(points))\n throw new Error('array expected');\n points.forEach((p, i) => {\n if (!(p instanceof c))\n throw new Error('invalid point at index ' + i);\n });\n}\nfunction validateMSMScalars(scalars, field) {\n if (!Array.isArray(scalars))\n throw new Error('array of scalars expected');\n scalars.forEach((s, i) => {\n if (!field.isValid(s))\n throw new Error('invalid scalar at index ' + i);\n });\n}\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes\nconst pointPrecomputes = new WeakMap();\nconst pointWindowSizes = new WeakMap(); // This allows use make points immutable (nothing changes inside)\nfunction getW(P) {\n return pointWindowSizes.get(P) || 1;\n}\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF(c, bits) {\n return {\n constTimeNegate,\n hasPrecomputes(elm) {\n return getW(elm) !== 1;\n },\n // non-const time multiplication ladder\n unsafeLadder(elm, n, p = c.ZERO) {\n let d = elm;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n },\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @param elm Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(elm, W) {\n const { windows, windowSize } = calcWOpts(W, bits);\n const points = [];\n let p = elm;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // =1, because we skip zero\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n },\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n // But need to carefully remove other checks before wNAF. ORDER == bits here\n const { windows, windowSize } = calcWOpts(W, bits);\n let p = c.ZERO;\n let f = c.BASE;\n const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n // Extract W bits.\n let wbits = Number(n & mask);\n // Shift number by W bits.\n n >>= shiftBy;\n // If the bits are bigger than max size, we'll split those.\n // +224 => 256 - 32\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n // Check if we're onto Zero point.\n // Add random point inside current window to f.\n const offset1 = offset;\n const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n const cond1 = window % 2 !== 0;\n const cond2 = wbits < 0;\n if (wbits === 0) {\n // The most important part for const-time getPublicKey\n f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n }\n else {\n p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n }\n }\n // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n // Even if the variable is still unused, there are some checks which will\n // throw an exception, so compiler needs to prove they won't happen, which is hard.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n },\n /**\n * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @param acc accumulator point to add result of multiplication\n * @returns point\n */\n wNAFUnsafe(W, precomputes, n, acc = c.ZERO) {\n const { windows, windowSize } = calcWOpts(W, bits);\n const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n if (n === _0n)\n break; // No need to go over empty scalar\n // Extract W bits.\n let wbits = Number(n & mask);\n // Shift number by W bits.\n n >>= shiftBy;\n // If the bits are bigger than max size, we'll split those.\n // +224 => 256 - 32\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0)\n continue;\n let curr = precomputes[offset + Math.abs(wbits) - 1]; // -1 because we skip zero\n if (wbits < 0)\n curr = curr.negate();\n // NOTE: by re-using acc, we can save a lot of additions in case of MSM\n acc = acc.add(curr);\n }\n return acc;\n },\n getPrecomputes(W, P, transform) {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(P);\n if (!comp) {\n comp = this.precomputeWindow(P, W);\n if (W !== 1)\n pointPrecomputes.set(P, transform(comp));\n }\n return comp;\n },\n wNAFCached(P, n, transform) {\n const W = getW(P);\n return this.wNAF(W, this.getPrecomputes(W, P, transform), n);\n },\n wNAFCachedUnsafe(P, n, transform, prev) {\n const W = getW(P);\n if (W === 1)\n return this.unsafeLadder(P, n, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, P, transform), n, prev);\n },\n // We calculate precomputes for elliptic curve point multiplication\n // using windowed method. This specifies window size and\n // stores precomputed values. Usually only base point would be precomputed.\n setWindowSize(P, W) {\n validateW(W, bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n },\n };\n}\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster with precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger(c, fieldN, points, scalars) {\n // If we split scalars by some window (let's say 8 bits), every chunk will only\n // take 256 buckets even if there are 4096 scalars, also re-uses double.\n // TODO:\n // - https://eprint.iacr.org/2024/750.pdf\n // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n // 0 is accepted in scalars\n validateMSMPoints(points, c);\n validateMSMScalars(scalars, fieldN);\n if (points.length !== scalars.length)\n throw new Error('arrays of points and scalars must have equal length');\n const zero = c.ZERO;\n const wbits = bitLen(BigInt(points.length));\n const windowSize = wbits > 12 ? wbits - 3 : wbits > 4 ? wbits - 2 : wbits ? 2 : 1; // in bits\n const MASK = (1 << windowSize) - 1;\n const buckets = new Array(MASK + 1).fill(zero); // +1 for zero array\n const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n let sum = zero;\n for (let i = lastBits; i >= 0; i -= windowSize) {\n buckets.fill(zero);\n for (let j = 0; j < scalars.length; j++) {\n const scalar = scalars[j];\n const wbits = Number((scalar >> BigInt(i)) & BigInt(MASK));\n buckets[wbits] = buckets[wbits].add(points[j]);\n }\n let resI = zero; // not using this will do small speed-up, but will lose ct\n // Skip first bucket, because it is zero\n for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n sumI = sumI.add(buckets[j]);\n resI = resI.add(sumI);\n }\n sum = sum.add(resI);\n if (i !== 0)\n for (let j = 0; j < windowSize; j++)\n sum = sum.double();\n }\n return sum;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe(c, fieldN, points, windowSize) {\n /**\n * Performance Analysis of Window-based Precomputation\n *\n * Base Case (256-bit scalar, 8-bit window):\n * - Standard precomputation requires:\n * - 31 additions per scalar × 256 scalars = 7,936 ops\n * - Plus 255 summary additions = 8,191 total ops\n * Note: Summary additions can be optimized via accumulator\n *\n * Chunked Precomputation Analysis:\n * - Using 32 chunks requires:\n * - 255 additions per chunk\n * - 256 doublings\n * - Total: (255 × 32) + 256 = 8,416 ops\n *\n * Memory Usage Comparison:\n * Window Size | Standard Points | Chunked Points\n * ------------|-----------------|---------------\n * 4-bit | 520 | 15\n * 8-bit | 4,224 | 255\n * 10-bit | 13,824 | 1,023\n * 16-bit | 557,056 | 65,535\n *\n * Key Advantages:\n * 1. Enables larger window sizes due to reduced memory overhead\n * 2. More efficient for smaller scalar counts:\n * - 16 chunks: (16 × 255) + 256 = 4,336 ops\n * - ~2x faster than standard 8,191 ops\n *\n * Limitations:\n * - Not suitable for plain precomputes (requires 256 constant doublings)\n * - Performance degrades with larger scalar counts:\n * - Optimal for ~256 scalars\n * - Less efficient for 4096+ scalars (Pippenger preferred)\n */\n validateW(windowSize, fieldN.BITS);\n validateMSMPoints(points, c);\n const zero = c.ZERO;\n const tableSize = 2 ** windowSize - 1; // table size (without zero)\n const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n const MASK = BigInt((1 << windowSize) - 1);\n const tables = points.map((p) => {\n const res = [];\n for (let i = 0, acc = p; i < tableSize; i++) {\n res.push(acc);\n acc = acc.add(p);\n }\n return res;\n });\n return (scalars) => {\n validateMSMScalars(scalars, fieldN);\n if (scalars.length > points.length)\n throw new Error('array of scalars must be smaller than array of points');\n let res = zero;\n for (let i = 0; i < chunks; i++) {\n // No need to double if accumulator is still zero.\n if (res !== zero)\n for (let j = 0; j < windowSize; j++)\n res = res.double();\n const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n for (let j = 0; j < scalars.length; j++) {\n const n = scalars[j];\n const curr = Number((n >> shiftBy) & MASK);\n if (!curr)\n continue; // skip zero scalars chunks\n res = res.add(tables[j][curr - 1]);\n }\n }\n return res;\n };\n}\nexport function validateBasic(curve) {\n validateField(curve.Fp);\n validateObject(curve, {\n n: 'bigint',\n h: 'bigint',\n Gx: 'field',\n Gy: 'field',\n }, {\n nBitLength: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n });\n // Set defaults\n return Object.freeze({\n ...nLength(curve.n, curve.nBitLength),\n ...curve,\n ...{ p: curve.Fp.ORDER },\n });\n}\n//# sourceMappingURL=curve.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax² + y² = 1 + dx²y²\nimport { validateBasic, wNAF, pippenger, } from './curve.js';\nimport { mod, Field } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, memoized, abool } from './utils.js';\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _8n = BigInt(8);\n// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\nconst VERIFY_DEFAULT = { zip215: true };\nfunction validateOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(curve, {\n hash: 'function',\n a: 'bigint',\n d: 'bigint',\n randomBytes: 'function',\n }, {\n adjustScalarBytes: 'function',\n domain: 'function',\n uvRatio: 'function',\n mapToCurve: 'function',\n });\n // Set defaults\n return Object.freeze({ ...opts });\n}\n/**\n * Creates Twisted Edwards curve with EdDSA signatures.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, d, p, n, Gx, Gy, h\n * const curve = twistedEdwards({ a, d, Fp: Field(p), n, Gx, Gy, h })\n */\nexport function twistedEdwards(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { Fp, n: CURVE_ORDER, prehash: prehash, hash: cHash, randomBytes, nByteLength, h: cofactor, } = CURVE;\n // Important:\n // There are some places where Fp.BYTES is used instead of nByteLength.\n // So far, everything has been tested with curves of Fp.BYTES == nByteLength.\n // TODO: test and find curves which behave otherwise.\n const MASK = _2n << (BigInt(nByteLength * 8) - _1n);\n const modP = Fp.create; // Function overrides\n const Fn = Field(CURVE.n, CURVE.nBitLength);\n // sqrt(u/v)\n const uvRatio = CURVE.uvRatio ||\n ((u, v) => {\n try {\n return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n }\n catch (e) {\n return { isValid: false, value: _0n };\n }\n });\n const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes) => bytes); // NOOP\n const domain = CURVE.domain ||\n ((data, ctx, phflag) => {\n abool('phflag', phflag);\n if (ctx.length || phflag)\n throw new Error('Contexts/pre-hash are not supported');\n return data;\n }); // NOOP\n // 0 <= n < MASK\n // Coordinates larger than Fp.ORDER are allowed for zip215\n function aCoordinate(title, n) {\n ut.aInRange('coordinate ' + title, n, _0n, MASK);\n }\n function assertPoint(other) {\n if (!(other instanceof Point))\n throw new Error('ExtendedPoint expected');\n }\n // Converts Extended point to default (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n const toAffineMemo = memoized((p, iz) => {\n const { ex: x, ey: y, ez: z } = p;\n const is0 = p.is0();\n if (iz == null)\n iz = is0 ? _8n : Fp.inv(z); // 8 was chosen arbitrarily\n const ax = modP(x * iz);\n const ay = modP(y * iz);\n const zz = modP(z * iz);\n if (is0)\n return { x: _0n, y: _1n };\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n });\n const assertValidMemo = memoized((p) => {\n const { a, d } = CURVE;\n if (p.is0())\n throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { ex: X, ey: Y, ez: Z, et: T } = p;\n const X2 = modP(X * X); // X²\n const Y2 = modP(Y * Y); // Y²\n const Z2 = modP(Z * Z); // Z²\n const Z4 = modP(Z2 * Z2); // Z⁴\n const aX2 = modP(X2 * a); // aX²\n const left = modP(Z2 * modP(aX2 + Y2)); // (aX² + Y²)Z²\n const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n throw new Error('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = modP(X * Y);\n const ZT = modP(Z * T);\n if (XY !== ZT)\n throw new Error('bad point: equation left != right (2)');\n return true;\n });\n // Extended Point works in extended coordinates: (x, y, z, t) ∋ (x=x/z, y=y/z, t=xy).\n // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n class Point {\n constructor(ex, ey, ez, et) {\n this.ex = ex;\n this.ey = ey;\n this.ez = ez;\n this.et = et;\n aCoordinate('x', ex);\n aCoordinate('y', ey);\n aCoordinate('z', ez);\n aCoordinate('t', et);\n Object.freeze(this);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n static fromAffine(p) {\n if (p instanceof Point)\n throw new Error('extended point not allowed');\n const { x, y } = p || {};\n aCoordinate('x', x);\n aCoordinate('y', y);\n return new Point(x, y, _1n, modP(x * y));\n }\n static normalizeZ(points) {\n const toInv = Fp.invertBatch(points.map((p) => p.ez));\n return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n }\n // Multiscalar Multiplication\n static msm(points, scalars) {\n return pippenger(Point, Fn, points, scalars);\n }\n // \"Private method\", don't use it directly\n _setWindowSize(windowSize) {\n wnaf.setWindowSize(this, windowSize);\n }\n // Not required for fromHex(), which always creates valid points.\n // Could be useful for fromAffine().\n assertValidity() {\n assertValidMemo(this);\n }\n // Compare one point to another.\n equals(other) {\n assertPoint(other);\n const { ex: X1, ey: Y1, ez: Z1 } = this;\n const { ex: X2, ey: Y2, ez: Z2 } = other;\n const X1Z2 = modP(X1 * Z2);\n const X2Z1 = modP(X2 * Z1);\n const Y1Z2 = modP(Y1 * Z2);\n const Y2Z1 = modP(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n negate() {\n // Flips point sign to a negative one (-x, y in affine coords)\n return new Point(modP(-this.ex), this.ey, this.ez, modP(-this.et));\n }\n // Fast algo for doubling Extended Point.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n // Cost: 4M + 4S + 1*a + 6add + 1*2.\n double() {\n const { a } = CURVE;\n const { ex: X1, ey: Y1, ez: Z1 } = this;\n const A = modP(X1 * X1); // A = X12\n const B = modP(Y1 * Y1); // B = Y12\n const C = modP(_2n * modP(Z1 * Z1)); // C = 2*Z12\n const D = modP(a * A); // D = a*A\n const x1y1 = X1 + Y1;\n const E = modP(modP(x1y1 * x1y1) - A - B); // E = (X1+Y1)2-A-B\n const G = D + B; // G = D+B\n const F = G - C; // F = G-C\n const H = D - B; // H = D-B\n const X3 = modP(E * F); // X3 = E*F\n const Y3 = modP(G * H); // Y3 = G*H\n const T3 = modP(E * H); // T3 = E*H\n const Z3 = modP(F * G); // Z3 = F*G\n return new Point(X3, Y3, Z3, T3);\n }\n // Fast algo for adding 2 Extended Points.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd\n // Cost: 9M + 1*a + 1*d + 7add.\n add(other) {\n assertPoint(other);\n const { a, d } = CURVE;\n const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;\n const { ex: X2, ey: Y2, ez: Z2, et: T2 } = other;\n // Faster algo for adding 2 Extended Points when curve's a=-1.\n // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-4\n // Cost: 8M + 8add + 2*2.\n // Note: It does not check whether the `other` point is valid.\n if (a === BigInt(-1)) {\n const A = modP((Y1 - X1) * (Y2 + X2));\n const B = modP((Y1 + X1) * (Y2 - X2));\n const F = modP(B - A);\n if (F === _0n)\n return this.double(); // Same point. Tests say it doesn't affect timing\n const C = modP(Z1 * _2n * T2);\n const D = modP(T1 * _2n * Z2);\n const E = D + C;\n const G = B + A;\n const H = D - C;\n const X3 = modP(E * F);\n const Y3 = modP(G * H);\n const T3 = modP(E * H);\n const Z3 = modP(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n const A = modP(X1 * X2); // A = X1*X2\n const B = modP(Y1 * Y2); // B = Y1*Y2\n const C = modP(T1 * d * T2); // C = T1*d*T2\n const D = modP(Z1 * Z2); // D = Z1*Z2\n const E = modP((X1 + Y1) * (X2 + Y2) - A - B); // E = (X1+Y1)*(X2+Y2)-A-B\n const F = D - C; // F = D-C\n const G = D + C; // G = D+C\n const H = modP(B - a * A); // H = B-a*A\n const X3 = modP(E * F); // X3 = E*F\n const Y3 = modP(G * H); // Y3 = G*H\n const T3 = modP(E * H); // T3 = E*H\n const Z3 = modP(F * G); // Z3 = F*G\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n wNAF(n) {\n return wnaf.wNAFCached(this, n, Point.normalizeZ);\n }\n // Constant-time multiplication.\n multiply(scalar) {\n const n = scalar;\n ut.aInRange('scalar', n, _1n, CURVE_ORDER); // 1 <= scalar < L\n const { p, f } = this.wNAF(n);\n return Point.normalizeZ([p, f])[0];\n }\n // Non-constant-time multiplication. Uses double-and-add algorithm.\n // It's faster, but should only be used when you don't care about\n // an exposed private key e.g. sig verification.\n // Does NOT allow scalars higher than CURVE.n.\n // Accepts optional accumulator to merge with multiply (important for sparse scalars)\n multiplyUnsafe(scalar, acc = Point.ZERO) {\n const n = scalar;\n ut.aInRange('scalar', n, _0n, CURVE_ORDER); // 0 <= scalar < L\n if (n === _0n)\n return I;\n if (this.is0() || n === _1n)\n return this;\n return wnaf.wNAFCachedUnsafe(this, n, Point.normalizeZ, acc);\n }\n // Checks if point is of small order.\n // If you add something to small order point, you will have \"dirty\"\n // point with torsion component.\n // Multiplies point by cofactor and checks if the result is 0.\n isSmallOrder() {\n return this.multiplyUnsafe(cofactor).is0();\n }\n // Multiplies point by curve order and checks if the result is 0.\n // Returns `false` is the point is dirty.\n isTorsionFree() {\n return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n }\n // Converts Extended point to default (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n toAffine(iz) {\n return toAffineMemo(this, iz);\n }\n clearCofactor() {\n const { h: cofactor } = CURVE;\n if (cofactor === _1n)\n return this;\n return this.multiplyUnsafe(cofactor);\n }\n // Converts hash string or Uint8Array to Point.\n // Uses algo from RFC8032 5.1.3.\n static fromHex(hex, zip215 = false) {\n const { d, a } = CURVE;\n const len = Fp.BYTES;\n hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\n abool('zip215', zip215);\n const normed = hex.slice(); // copy again, we'll manipulate it\n const lastByte = hex[len - 1]; // select last byte\n normed[len - 1] = lastByte & ~0x80; // clear last bit\n const y = ut.bytesToNumberLE(normed);\n // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.\n // RFC8032 prohibits >= p, but ZIP215 doesn't\n // zip215=true: 0 <= y < MASK (2^256 for ed25519)\n // zip215=false: 0 <= y < P (2^255-19 for ed25519)\n const max = zip215 ? MASK : Fp.ORDER;\n ut.aInRange('pointHex.y', y, _0n, max);\n // Ed25519: x² = (y²-1)/(dy²+1) mod p. Ed448: x² = (y²-1)/(dy²-1) mod p. Generic case:\n // ax²+y²=1+dx²y² => y²-1=dx²y²-ax² => y²-1=x²(dy²-a) => x²=(y²-1)/(dy²-a)\n const y2 = modP(y * y); // denominator is always non-0 mod p.\n const u = modP(y2 - _1n); // u = y² - 1\n const v = modP(d * y2 - a); // v = d y² + 1.\n let { isValid, value: x } = uvRatio(u, v); // √(u/v)\n if (!isValid)\n throw new Error('Point.fromHex: invalid y coordinate');\n const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === _0n && isLastByteOdd)\n // if x=0 and x_0 = 1, fail\n throw new Error('Point.fromHex: x=0 and x_0=1');\n if (isLastByteOdd !== isXOdd)\n x = modP(-x); // if x_0 != x mod 2, set x = p-x\n return Point.fromAffine({ x, y });\n }\n static fromPrivateKey(privKey) {\n return getExtendedPublicKey(privKey).point;\n }\n toRawBytes() {\n const { x, y } = this.toAffine();\n const bytes = ut.numberToBytesLE(y, Fp.BYTES); // each y has 2 x values (x, -y)\n bytes[bytes.length - 1] |= x & _1n ? 0x80 : 0; // when compressing, it's enough to store y\n return bytes; // and use the last byte to encode sign of x\n }\n toHex() {\n return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n }\n }\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n Point.ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n const { BASE: G, ZERO: I } = Point;\n const wnaf = wNAF(Point, nByteLength * 8);\n function modN(a) {\n return mod(a, CURVE_ORDER);\n }\n // Little-endian SHA512 with modulo n\n function modN_LE(hash) {\n return modN(ut.bytesToNumberLE(hash));\n }\n /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n function getExtendedPublicKey(key) {\n const len = Fp.BYTES;\n key = ensureBytes('private key', key, len);\n // Hash private key with curve's hash function to produce uniformingly random input\n // Check byte lengths: ensure(64, h(ensure(32, key)))\n const hashed = ensureBytes('hashed private key', cHash(key), 2 * len);\n const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE\n const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6)\n const scalar = modN_LE(head); // The actual private scalar\n const point = G.multiply(scalar); // Point on Edwards curve aka public key\n const pointBytes = point.toRawBytes(); // Uint8Array representation\n return { head, prefix, scalar, point, pointBytes };\n }\n // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n function getPublicKey(privKey) {\n return getExtendedPublicKey(privKey).pointBytes;\n }\n // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n function hashDomainToScalar(context = new Uint8Array(), ...msgs) {\n const msg = ut.concatBytes(...msgs);\n return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));\n }\n /** Signs message with privateKey. RFC8032 5.1.6 */\n function sign(msg, privKey, options = {}) {\n msg = ensureBytes('message', msg);\n if (prehash)\n msg = prehash(msg); // for ed25519ph etc.\n const { prefix, scalar, pointBytes } = getExtendedPublicKey(privKey);\n const r = hashDomainToScalar(options.context, prefix, msg); // r = dom2(F, C) || prefix || PH(M)\n const R = G.multiply(r).toRawBytes(); // R = rG\n const k = hashDomainToScalar(options.context, R, pointBytes, msg); // R || A || PH(M)\n const s = modN(r + k * scalar); // S = (r + k * s) mod L\n ut.aInRange('signature.s', s, _0n, CURVE_ORDER); // 0 <= s < l\n const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n return ensureBytes('result', res, Fp.BYTES * 2); // 64-byte signature\n }\n const verifyOpts = VERIFY_DEFAULT;\n /**\n * Verifies EdDSA signature against message and public key. RFC8032 5.1.7.\n * An extended group equation is checked.\n */\n function verify(sig, msg, publicKey, options = verifyOpts) {\n const { context, zip215 } = options;\n const len = Fp.BYTES; // Verifies EdDSA signature against message and public key. RFC8032 5.1.7.\n sig = ensureBytes('signature', sig, 2 * len); // An extended group equation is checked.\n msg = ensureBytes('message', msg);\n publicKey = ensureBytes('publicKey', publicKey, len);\n if (zip215 !== undefined)\n abool('zip215', zip215);\n if (prehash)\n msg = prehash(msg); // for ed25519ph, etc\n const s = ut.bytesToNumberLE(sig.slice(len, 2 * len));\n let A, R, SB;\n try {\n // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.\n // zip215=true: 0 <= y < MASK (2^256 for ed25519)\n // zip215=false: 0 <= y < P (2^255-19 for ed25519)\n A = Point.fromHex(publicKey, zip215);\n R = Point.fromHex(sig.slice(0, len), zip215);\n SB = G.multiplyUnsafe(s); // 0 <= s < l is done inside\n }\n catch (error) {\n return false;\n }\n if (!zip215 && A.isSmallOrder())\n return false;\n const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n const RkA = R.add(A.multiplyUnsafe(k));\n // Extended group equation\n // [8][S]B = [8]R + [8][k]A'\n return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n }\n G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n const utils = {\n getExtendedPublicKey,\n // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n randomPrivateKey: () => randomBytes(Fp.BYTES),\n /**\n * We're doing scalar multiplication (used in getPublicKey etc) with precomputed BASE_POINT\n * values. This slows down first getPublicKey() by milliseconds (see Speed section),\n * but allows to speed-up subsequent getPublicKey() calls up to 20x.\n * @param windowSize 2, 4, 8, 16\n */\n precompute(windowSize = 8, point = Point.BASE) {\n point._setWindowSize(windowSize);\n point.multiply(BigInt(3));\n return point;\n },\n };\n return {\n CURVE,\n getPublicKey,\n sign,\n verify,\n ExtendedPoint: Point,\n utils,\n };\n}\n//# sourceMappingURL=edwards.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha512 } from '@noble/hashes/sha512';\nimport { concatBytes, randomBytes, utf8ToBytes } from '@noble/hashes/utils';\nimport { twistedEdwards } from './abstract/edwards.js';\nimport { createHasher, expand_message_xmd } from './abstract/hash-to-curve.js';\nimport { Field, FpSqrtEven, isNegativeLE, mod, pow2 } from './abstract/modular.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { bytesToHex, bytesToNumberLE, ensureBytes, equalBytes, numberToBytesLE, } from './abstract/utils.js';\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\nconst ED25519_P = BigInt('57896044618658097711785492504343953926634992332820282019728792003956564819949');\n// √(-1) aka √(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = /* @__PURE__ */ BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _5n = BigInt(5), _8n = BigInt(8);\nfunction ed25519_pow_2_252_3(x) {\n // prettier-ignore\n const _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n const P = ED25519_P;\n const x2 = (x * x) % P;\n const b2 = (x2 * x) % P; // x^3, 11\n const b4 = (pow2(b2, _2n, P) * b2) % P; // x^15, 1111\n const b5 = (pow2(b4, _1n, P) * x) % P; // x^31\n const b10 = (pow2(b5, _5n, P) * b5) % P;\n const b20 = (pow2(b10, _10n, P) * b10) % P;\n const b40 = (pow2(b20, _20n, P) * b20) % P;\n const b80 = (pow2(b40, _40n, P) * b40) % P;\n const b160 = (pow2(b80, _80n, P) * b80) % P;\n const b240 = (pow2(b160, _80n, P) * b80) % P;\n const b250 = (pow2(b240, _10n, P) * b10) % P;\n const pow_p_5_8 = (pow2(b250, _2n, P) * x) % P;\n // ^ To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n}\nfunction adjustScalarBytes(bytes) {\n // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar,\n // set the three least significant bits of the first byte\n bytes[0] &= 248; // 0b1111_1000\n // and the most significant bit of the last to zero,\n bytes[31] &= 127; // 0b0111_1111\n // set the second most significant bit of the last byte to 1\n bytes[31] |= 64; // 0b0100_0000\n return bytes;\n}\n// sqrt(u/v)\nfunction uvRatio(u, v) {\n const P = ED25519_P;\n const v3 = mod(v * v * v, P); // v³\n const v7 = mod(v3 * v3 * v, P); // v⁷\n // (p+3)/8 and (p-5)/8\n const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;\n let x = mod(u * v3 * pow, P); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = mod(v * x * x, P); // vx²\n const root1 = x; // First root candidate\n const root2 = mod(x * ED25519_SQRT_M1, P); // Second root candidate\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === mod(-u, P); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx² = -u√(-1)\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if (isNegativeLE(x, P))\n x = mod(-x, P);\n return { isValid: useRoot1 || useRoot2, value: x };\n}\n// Just in case\nexport const ED25519_TORSION_SUBGROUP = [\n '0100000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n '0000000000000000000000000000000000000000000000000000000000000080',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n '0000000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n];\nconst Fp = /* @__PURE__ */ (() => Field(ED25519_P, undefined, true))();\nconst ed25519Defaults = /* @__PURE__ */ (() => ({\n // Param: a\n a: BigInt(-1), // Fp.create(-1) is proper; our way still works and is faster\n // d is equal to -121665/121666 over finite field.\n // Negative number is P - number, and division is invert(number, P)\n d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),\n // Finite field 𝔽p over which we'll do calculations; 2n**255n - 19n\n Fp,\n // Subgroup order: how many points curve has\n // 2n**252n + 27742317777372353535851937790883648493n;\n n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'),\n // Cofactor\n h: _8n,\n // Base point (x, y) aka generator point\n Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),\n Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),\n hash: sha512,\n randomBytes,\n adjustScalarBytes,\n // dom2\n // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3.\n // Constant-time, u/√v\n uvRatio,\n}))();\n/**\n * ed25519 curve with EdDSA signatures.\n */\nexport const ed25519 = /* @__PURE__ */ (() => twistedEdwards(ed25519Defaults))();\nfunction ed25519_domain(data, ctx, phflag) {\n if (ctx.length > 255)\n throw new Error('Context is too big');\n return concatBytes(utf8ToBytes('SigEd25519 no Ed25519 collisions'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data);\n}\nexport const ed25519ctx = /* @__PURE__ */ (() => twistedEdwards({\n ...ed25519Defaults,\n domain: ed25519_domain,\n}))();\nexport const ed25519ph = /* @__PURE__ */ (() => twistedEdwards(Object.assign({}, ed25519Defaults, {\n domain: ed25519_domain,\n prehash: sha512,\n})))();\nexport const x25519 = /* @__PURE__ */ (() => montgomery({\n P: ED25519_P,\n a: BigInt(486662),\n montgomeryBits: 255, // n is 253 bits\n nByteLength: 32,\n Gu: BigInt(9),\n powPminus2: (x) => {\n const P = ED25519_P;\n // x^(p-2) aka x^(2^255-21)\n const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n return mod(pow2(pow_p_5_8, _3n, P) * b2, P);\n },\n adjustScalarBytes,\n randomBytes,\n}))();\n/**\n * Converts ed25519 public key to x25519 public key. Uses formula:\n * * `(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)`\n * * `(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))`\n * @example\n * const someonesPub = ed25519.getPublicKey(ed25519.utils.randomPrivateKey());\n * const aPriv = x25519.utils.randomPrivateKey();\n * x25519.getSharedSecret(aPriv, edwardsToMontgomeryPub(someonesPub))\n */\nexport function edwardsToMontgomeryPub(edwardsPub) {\n const { y } = ed25519.ExtendedPoint.fromHex(edwardsPub);\n const _1n = BigInt(1);\n return Fp.toBytes(Fp.create((_1n + y) * Fp.inv(_1n - y)));\n}\nexport const edwardsToMontgomery = edwardsToMontgomeryPub; // deprecated\n/**\n * Converts ed25519 secret key to x25519 secret key.\n * @example\n * const someonesPub = x25519.getPublicKey(x25519.utils.randomPrivateKey());\n * const aPriv = ed25519.utils.randomPrivateKey();\n * x25519.getSharedSecret(edwardsToMontgomeryPriv(aPriv), someonesPub)\n */\nexport function edwardsToMontgomeryPriv(edwardsPriv) {\n const hashed = ed25519Defaults.hash(edwardsPriv.subarray(0, 32));\n return ed25519Defaults.adjustScalarBytes(hashed).subarray(0, 32);\n}\n// Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator)\n// NOTE: very important part is usage of FpSqrtEven for ELL2_C1_EDWARDS, since\n// SageMath returns different root first and everything falls apart\nconst ELL2_C1 = /* @__PURE__ */ (() => (Fp.ORDER + _3n) / _8n)(); // 1. c1 = (q + 3) / 8 # Integer arithmetic\nconst ELL2_C2 = /* @__PURE__ */ (() => Fp.pow(_2n, ELL2_C1))(); // 2. c2 = 2^c1\nconst ELL2_C3 = /* @__PURE__ */ (() => Fp.sqrt(Fp.neg(Fp.ONE)))(); // 3. c3 = sqrt(-1)\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u) {\n const ELL2_C4 = (Fp.ORDER - _5n) / _8n; // 4. c4 = (q - 5) / 8 # Integer arithmetic\n const ELL2_J = BigInt(486662);\n let tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, _2n); // 2. tv1 = 2 * tv1\n let xd = Fp.add(tv1, Fp.ONE); // 3. xd = tv1 + 1 # Nonzero: -1 is square (mod p), tv1 is not\n let x1n = Fp.neg(ELL2_J); // 4. x1n = -J # x1 = x1n / xd = -J / (1 + 2 * u^2)\n let tv2 = Fp.sqr(xd); // 5. tv2 = xd^2\n let gxd = Fp.mul(tv2, xd); // 6. gxd = tv2 * xd # gxd = xd^3\n let gx1 = Fp.mul(tv1, ELL2_J); // 7. gx1 = J * tv1 # x1n + J * xd\n gx1 = Fp.mul(gx1, x1n); // 8. gx1 = gx1 * x1n # x1n^2 + J * x1n * xd\n gx1 = Fp.add(gx1, tv2); // 9. gx1 = gx1 + tv2 # x1n^2 + J * x1n * xd + xd^2\n gx1 = Fp.mul(gx1, x1n); // 10. gx1 = gx1 * x1n # x1n^3 + J * x1n^2 * xd + x1n * xd^2\n let tv3 = Fp.sqr(gxd); // 11. tv3 = gxd^2\n tv2 = Fp.sqr(tv3); // 12. tv2 = tv3^2 # gxd^4\n tv3 = Fp.mul(tv3, gxd); // 13. tv3 = tv3 * gxd # gxd^3\n tv3 = Fp.mul(tv3, gx1); // 14. tv3 = tv3 * gx1 # gx1 * gxd^3\n tv2 = Fp.mul(tv2, tv3); // 15. tv2 = tv2 * tv3 # gx1 * gxd^7\n let y11 = Fp.pow(tv2, ELL2_C4); // 16. y11 = tv2^c4 # (gx1 * gxd^7)^((p - 5) / 8)\n y11 = Fp.mul(y11, tv3); // 17. y11 = y11 * tv3 # gx1*gxd^3*(gx1*gxd^7)^((p-5)/8)\n let y12 = Fp.mul(y11, ELL2_C3); // 18. y12 = y11 * c3\n tv2 = Fp.sqr(y11); // 19. tv2 = y11^2\n tv2 = Fp.mul(tv2, gxd); // 20. tv2 = tv2 * gxd\n let e1 = Fp.eql(tv2, gx1); // 21. e1 = tv2 == gx1\n let y1 = Fp.cmov(y12, y11, e1); // 22. y1 = CMOV(y12, y11, e1) # If g(x1) is square, this is its sqrt\n let x2n = Fp.mul(x1n, tv1); // 23. x2n = x1n * tv1 # x2 = x2n / xd = 2 * u^2 * x1n / xd\n let y21 = Fp.mul(y11, u); // 24. y21 = y11 * u\n y21 = Fp.mul(y21, ELL2_C2); // 25. y21 = y21 * c2\n let y22 = Fp.mul(y21, ELL2_C3); // 26. y22 = y21 * c3\n let gx2 = Fp.mul(gx1, tv1); // 27. gx2 = gx1 * tv1 # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)\n tv2 = Fp.sqr(y21); // 28. tv2 = y21^2\n tv2 = Fp.mul(tv2, gxd); // 29. tv2 = tv2 * gxd\n let e2 = Fp.eql(tv2, gx2); // 30. e2 = tv2 == gx2\n let y2 = Fp.cmov(y22, y21, e2); // 31. y2 = CMOV(y22, y21, e2) # If g(x2) is square, this is its sqrt\n tv2 = Fp.sqr(y1); // 32. tv2 = y1^2\n tv2 = Fp.mul(tv2, gxd); // 33. tv2 = tv2 * gxd\n let e3 = Fp.eql(tv2, gx1); // 34. e3 = tv2 == gx1\n let xn = Fp.cmov(x2n, x1n, e3); // 35. xn = CMOV(x2n, x1n, e3) # If e3, x = x1, else x = x2\n let y = Fp.cmov(y2, y1, e3); // 36. y = CMOV(y2, y1, e3) # If e3, y = y1, else y = y2\n let e4 = Fp.isOdd(y); // 37. e4 = sgn0(y) == 1 # Fix sign of y\n y = Fp.cmov(y, Fp.neg(y), e3 !== e4); // 38. y = CMOV(y, -y, e3 XOR e4)\n return { xMn: xn, xMd: xd, yMn: y, yMd: _1n }; // 39. return (xn, xd, y, 1)\n}\nconst ELL2_C1_EDWARDS = /* @__PURE__ */ (() => FpSqrtEven(Fp, Fp.neg(BigInt(486664))))(); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u) {\n const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u); // 1. (xMn, xMd, yMn, yMd) =\n // map_to_curve_elligator2_curve25519(u)\n let xn = Fp.mul(xMn, yMd); // 2. xn = xMn * yMd\n xn = Fp.mul(xn, ELL2_C1_EDWARDS); // 3. xn = xn * c1\n let xd = Fp.mul(xMd, yMn); // 4. xd = xMd * yMn # xn / xd = c1 * xM / yM\n let yn = Fp.sub(xMn, xMd); // 5. yn = xMn - xMd\n let yd = Fp.add(xMn, xMd); // 6. yd = xMn + xMd # (n / d - 1) / (n / d + 1) = (n - d) / (n + d)\n let tv1 = Fp.mul(xd, yd); // 7. tv1 = xd * yd\n let e = Fp.eql(tv1, Fp.ZERO); // 8. e = tv1 == 0\n xn = Fp.cmov(xn, Fp.ZERO, e); // 9. xn = CMOV(xn, 0, e)\n xd = Fp.cmov(xd, Fp.ONE, e); // 10. xd = CMOV(xd, 1, e)\n yn = Fp.cmov(yn, Fp.ONE, e); // 11. yn = CMOV(yn, 1, e)\n yd = Fp.cmov(yd, Fp.ONE, e); // 12. yd = CMOV(yd, 1, e)\n const inv = Fp.invertBatch([xd, yd]); // batch division\n return { x: Fp.mul(xn, inv[0]), y: Fp.mul(yn, inv[1]) }; // 13. return (xn, xd, yn, yd)\n}\nconst htf = /* @__PURE__ */ (() => createHasher(ed25519.ExtendedPoint, (scalars) => map_to_curve_elligator2_edwards25519(scalars[0]), {\n DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',\n encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',\n p: Fp.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha512,\n}))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\nfunction assertRstPoint(other) {\n if (!(other instanceof RistPoint))\n throw new Error('RistrettoPoint expected');\n}\n// √(-1) aka √(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// √(ad - 1)\nconst SQRT_AD_MINUS_ONE = /* @__PURE__ */ BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235');\n// 1 / √(a-d)\nconst INVSQRT_A_MINUS_D = /* @__PURE__ */ BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578');\n// 1-d²\nconst ONE_MINUS_D_SQ = /* @__PURE__ */ BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838');\n// (d-1)²\nconst D_MINUS_ONE_SQ = /* @__PURE__ */ BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952');\n// Calculates 1/√(number)\nconst invertSqrt = (number) => uvRatio(_1n, number);\nconst MAX_255B = /* @__PURE__ */ BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes) => ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0) {\n const { d } = ed25519.CURVE;\n const P = ed25519.CURVE.Fp.ORDER;\n const mod = ed25519.CURVE.Fp.create;\n const r = mod(SQRT_M1 * r0 * r0); // 1\n const Ns = mod((r + _1n) * ONE_MINUS_D_SQ); // 2\n let c = BigInt(-1); // 3\n const D = mod((c - d * r) * mod(r + d)); // 4\n let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D); // 5\n let s_ = mod(s * r0); // 6\n if (!isNegativeLE(s_, P))\n s_ = mod(-s_);\n if (!Ns_D_is_sq)\n s = s_; // 7\n if (!Ns_D_is_sq)\n c = r; // 8\n const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D); // 9\n const s2 = s * s;\n const W0 = mod((s + s) * D); // 10\n const W1 = mod(Nt * SQRT_AD_MINUS_ONE); // 11\n const W2 = mod(_1n - s2); // 12\n const W3 = mod(_1n + s2); // 13\n return new ed25519.ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n}\n/**\n * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be\n * a source of bugs for protocols like ring signatures. Ristretto was created to solve this.\n * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint,\n * but it should work in its own namespace: do not combine those two.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-ristretto255-decaf448\n */\nclass RistPoint {\n // Private property to discourage combining ExtendedPoint + RistrettoPoint\n // Always use Ristretto encoding/decoding instead.\n constructor(ep) {\n this.ep = ep;\n }\n static fromAffine(ap) {\n return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));\n }\n /**\n * Takes uniform output of 64-byte hash function like sha512 and converts it to `RistrettoPoint`.\n * The hash-to-group operation applies Elligator twice and adds the results.\n * **Note:** this is one-way map, there is no conversion from point to hash.\n * https://ristretto.group/formulas/elligator.html\n * @param hex 64-byte output of a hash function\n */\n static hashToCurve(hex) {\n hex = ensureBytes('ristrettoHash', hex, 64);\n const r1 = bytes255ToNumberLE(hex.slice(0, 32));\n const R1 = calcElligatorRistrettoMap(r1);\n const r2 = bytes255ToNumberLE(hex.slice(32, 64));\n const R2 = calcElligatorRistrettoMap(r2);\n return new RistPoint(R1.add(R2));\n }\n /**\n * Converts ristretto-encoded string to ristretto point.\n * https://ristretto.group/formulas/decoding.html\n * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding\n */\n static fromHex(hex) {\n hex = ensureBytes('ristrettoHex', hex, 32);\n const { a, d } = ed25519.CURVE;\n const P = ed25519.CURVE.Fp.ORDER;\n const mod = ed25519.CURVE.Fp.create;\n const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';\n const s = bytes255ToNumberLE(hex);\n // 1. Check that s_bytes is the canonical encoding of a field element, or else abort.\n // 3. Check that s is non-negative, or else abort\n if (!equalBytes(numberToBytesLE(s, 32), hex) || isNegativeLE(s, P))\n throw new Error(emsg);\n const s2 = mod(s * s);\n const u1 = mod(_1n + a * s2); // 4 (a is -1)\n const u2 = mod(_1n - a * s2); // 5\n const u1_2 = mod(u1 * u1);\n const u2_2 = mod(u2 * u2);\n const v = mod(a * d * u1_2 - u2_2); // 6\n const { isValid, value: I } = invertSqrt(mod(v * u2_2)); // 7\n const Dx = mod(I * u2); // 8\n const Dy = mod(I * Dx * v); // 9\n let x = mod((s + s) * Dx); // 10\n if (isNegativeLE(x, P))\n x = mod(-x); // 10\n const y = mod(u1 * Dy); // 11\n const t = mod(x * y); // 12\n if (!isValid || isNegativeLE(t, P) || y === _0n)\n throw new Error(emsg);\n return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n }\n /**\n * Encodes ristretto point to Uint8Array.\n * https://ristretto.group/formulas/encoding.html\n */\n toRawBytes() {\n let { ex: x, ey: y, ez: z, et: t } = this.ep;\n const P = ed25519.CURVE.Fp.ORDER;\n const mod = ed25519.CURVE.Fp.create;\n const u1 = mod(mod(z + y) * mod(z - y)); // 1\n const u2 = mod(x * y); // 2\n // Square root always exists\n const u2sq = mod(u2 * u2);\n const { value: invsqrt } = invertSqrt(mod(u1 * u2sq)); // 3\n const D1 = mod(invsqrt * u1); // 4\n const D2 = mod(invsqrt * u2); // 5\n const zInv = mod(D1 * D2 * t); // 6\n let D; // 7\n if (isNegativeLE(t * zInv, P)) {\n let _x = mod(y * SQRT_M1);\n let _y = mod(x * SQRT_M1);\n x = _x;\n y = _y;\n D = mod(D1 * INVSQRT_A_MINUS_D);\n }\n else {\n D = D2; // 8\n }\n if (isNegativeLE(x * zInv, P))\n y = mod(-y); // 9\n let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n if (isNegativeLE(s, P))\n s = mod(-s);\n return numberToBytesLE(s, 32); // 11\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n toString() {\n return this.toHex();\n }\n // Compare one point to another.\n equals(other) {\n assertRstPoint(other);\n const { ex: X1, ey: Y1 } = this.ep;\n const { ex: X2, ey: Y2 } = other.ep;\n const mod = ed25519.CURVE.Fp.create;\n // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)\n const one = mod(X1 * Y2) === mod(Y1 * X2);\n const two = mod(Y1 * Y2) === mod(X1 * X2);\n return one || two;\n }\n add(other) {\n assertRstPoint(other);\n return new RistPoint(this.ep.add(other.ep));\n }\n subtract(other) {\n assertRstPoint(other);\n return new RistPoint(this.ep.subtract(other.ep));\n }\n multiply(scalar) {\n return new RistPoint(this.ep.multiply(scalar));\n }\n multiplyUnsafe(scalar) {\n return new RistPoint(this.ep.multiplyUnsafe(scalar));\n }\n double() {\n return new RistPoint(this.ep.double());\n }\n negate() {\n return new RistPoint(this.ep.negate());\n }\n}\nexport const RistrettoPoint = /* @__PURE__ */ (() => {\n if (!RistPoint.BASE)\n RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);\n if (!RistPoint.ZERO)\n RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);\n return RistPoint;\n})();\n// Hashing to ristretto255. https://www.rfc-editor.org/rfc/rfc9380#appendix-B\nexport const hashToRistretto255 = (msg, options) => {\n const d = options.DST;\n const DST = typeof d === 'string' ? utf8ToBytes(d) : d;\n const uniform_bytes = expand_message_xmd(msg, DST, 64, sha512);\n const P = RistPoint.hashToCurve(uniform_bytes);\n return P;\n};\nexport const hash_to_ristretto255 = hashToRistretto255; // legacy\n//# sourceMappingURL=ed25519.js.map","import {ed25519} from '@noble/curves/ed25519';\n\n/**\n * A 64 byte secret key, the first 32 bytes of which is the\n * private scalar and the last 32 bytes is the public key.\n * Read more: https://blog.mozilla.org/warner/2011/11/29/ed25519-keys/\n */\ntype Ed25519SecretKey = Uint8Array;\n\n/**\n * Ed25519 Keypair\n */\nexport interface Ed25519Keypair {\n publicKey: Uint8Array;\n secretKey: Ed25519SecretKey;\n}\n\nexport const generatePrivateKey = ed25519.utils.randomPrivateKey;\nexport const generateKeypair = (): Ed25519Keypair => {\n const privateScalar = ed25519.utils.randomPrivateKey();\n const publicKey = getPublicKey(privateScalar);\n const secretKey = new Uint8Array(64);\n secretKey.set(privateScalar);\n secretKey.set(publicKey, 32);\n return {\n publicKey,\n secretKey,\n };\n};\nexport const getPublicKey = ed25519.getPublicKey;\nexport function isOnCurve(publicKey: Uint8Array): boolean {\n try {\n ed25519.ExtendedPoint.fromHex(publicKey);\n return true;\n } catch {\n return false;\n }\n}\nexport const sign = (\n message: Parameters[0],\n secretKey: Ed25519SecretKey,\n) => ed25519.sign(message, secretKey.slice(0, 32));\nexport const verify = ed25519.verify;\n","import {Buffer} from 'buffer';\n\nexport const toBuffer = (arr: Buffer | Uint8Array | Array): Buffer => {\n if (Buffer.isBuffer(arr)) {\n return arr;\n } else if (arr instanceof Uint8Array) {\n return Buffer.from(arr.buffer, arr.byteOffset, arr.byteLength);\n } else {\n return Buffer.from(arr);\n }\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '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","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict'\n// 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.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\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 (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\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 _Buffer.alloc(0) }\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 (psz < source.length) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\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 = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\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","var basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n// copied from utils\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction aoutput(out, instance) {\n abytes(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}\nexport { anumber, anumber as number, abytes, abytes as bytes, ahash, aexists, aoutput };\nconst assert = {\n number: anumber,\n bytes: abytes,\n hash: ahash,\n exists: aexists,\n output: aoutput,\n};\nexport default assert;\n//# sourceMappingURL=_assert.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word, shift) => (word << shift) | ((word >>> (32 - shift)) >>> 0);\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n// The byte swap operation for uint32\nexport const byteSwap = (word) => ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n) => n : (n) => byteSwap(n);\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n}\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\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)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('utf8ToBytes expected string, got ' + typeof str);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return crypto.randomBytes(bytesLength);\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","import { aexists, aoutput } from './_assert.js';\nimport { Hash, createView, toBytes } from './utils.js';\n/**\n * Polyfill for Safari 14\n */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/**\n * Choice: a ? b : c\n */\nexport const Chi = (a, b, c) => (a & b) ^ (~a & c);\n/**\n * Majority function, true if any two inputs is true\n */\nexport const Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n const { view, buffer, blockLen } = 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 // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\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) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n//# sourceMappingURL=_md.js.map","import { HashMD, Chi, Maj } from './_md.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per late 2024.\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state:\n// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n constructor() {\n super();\n this.A = 0xc1059ed8 | 0;\n this.B = 0x367cd507 | 0;\n this.C = 0x3070dd17 | 0;\n this.D = 0xf70e5939 | 0;\n this.E = 0xffc00b31 | 0;\n this.F = 0x68581511 | 0;\n this.G = 0x64f98fa7 | 0;\n this.H = 0xbefa4fa4 | 0;\n this.outputLen = 28;\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\n/**\n * SHA2-224 hash function\n */\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n//# sourceMappingURL=sha256.js.map","'use strict';\n\n// This is free and unencumbered software released into the public domain.\n// See LICENSE.md for more information.\n\n//\n// Utilities\n//\n\n/**\n * @param {number} a The number to test.\n * @param {number} min The minimum value in the range, inclusive.\n * @param {number} max The maximum value in the range, inclusive.\n * @return {boolean} True if a >= min and a <= max.\n */\nfunction inRange(a, min, max) {\n return min <= a && a <= max;\n}\n\n/**\n * @param {*} o\n * @return {Object}\n */\nfunction ToDictionary(o) {\n if (o === undefined) return {};\n if (o === Object(o)) return o;\n throw TypeError('Could not convert argument to dictionary');\n}\n\n/**\n * @param {string} string Input string of UTF-16 code units.\n * @return {!Array.} Code points.\n */\nfunction stringToCodePoints(string) {\n // https://heycam.github.io/webidl/#dfn-obtain-unicode\n\n // 1. Let S be the DOMString value.\n var s = String(string);\n\n // 2. Let n be the length of S.\n var n = s.length;\n\n // 3. Initialize i to 0.\n var i = 0;\n\n // 4. Initialize U to be an empty sequence of Unicode characters.\n var u = [];\n\n // 5. While i < n:\n while (i < n) {\n\n // 1. Let c be the code unit in S at index i.\n var c = s.charCodeAt(i);\n\n // 2. Depending on the value of c:\n\n // c < 0xD800 or c > 0xDFFF\n if (c < 0xD800 || c > 0xDFFF) {\n // Append to U the Unicode character with code point c.\n u.push(c);\n }\n\n // 0xDC00 ≤ c ≤ 0xDFFF\n else if (0xDC00 <= c && c <= 0xDFFF) {\n // Append to U a U+FFFD REPLACEMENT CHARACTER.\n u.push(0xFFFD);\n }\n\n // 0xD800 ≤ c ≤ 0xDBFF\n else if (0xD800 <= c && c <= 0xDBFF) {\n // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT\n // CHARACTER.\n if (i === n - 1) {\n u.push(0xFFFD);\n }\n // 2. Otherwise, i < n−1:\n else {\n // 1. Let d be the code unit in S at index i+1.\n var d = string.charCodeAt(i + 1);\n\n // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then:\n if (0xDC00 <= d && d <= 0xDFFF) {\n // 1. Let a be c & 0x3FF.\n var a = c & 0x3FF;\n\n // 2. Let b be d & 0x3FF.\n var b = d & 0x3FF;\n\n // 3. Append to U the Unicode character with code point\n // 2^16+2^10*a+b.\n u.push(0x10000 + (a << 10) + b);\n\n // 4. Set i to i+1.\n i += 1;\n }\n\n // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a\n // U+FFFD REPLACEMENT CHARACTER.\n else {\n u.push(0xFFFD);\n }\n }\n }\n\n // 3. Set i to i+1.\n i += 1;\n }\n\n // 6. Return U.\n return u;\n}\n\n/**\n * @param {!Array.} code_points Array of code points.\n * @return {string} string String of UTF-16 code units.\n */\nfunction codePointsToString(code_points) {\n var s = '';\n for (var i = 0; i < code_points.length; ++i) {\n var cp = code_points[i];\n if (cp <= 0xFFFF) {\n s += String.fromCharCode(cp);\n } else {\n cp -= 0x10000;\n s += String.fromCharCode((cp >> 10) + 0xD800,\n (cp & 0x3FF) + 0xDC00);\n }\n }\n return s;\n}\n\n\n//\n// Implementation of Encoding specification\n// https://encoding.spec.whatwg.org/\n//\n\n//\n// 3. Terminology\n//\n\n/**\n * End-of-stream is a special token that signifies no more tokens\n * are in the stream.\n * @const\n */ var end_of_stream = -1;\n\n/**\n * A stream represents an ordered sequence of tokens.\n *\n * @constructor\n * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide the\n * stream.\n */\nfunction Stream(tokens) {\n /** @type {!Array.} */\n this.tokens = [].slice.call(tokens);\n}\n\nStream.prototype = {\n /**\n * @return {boolean} True if end-of-stream has been hit.\n */\n endOfStream: function() {\n return !this.tokens.length;\n },\n\n /**\n * When a token is read from a stream, the first token in the\n * stream must be returned and subsequently removed, and\n * end-of-stream must be returned otherwise.\n *\n * @return {number} Get the next token from the stream, or\n * end_of_stream.\n */\n read: function() {\n if (!this.tokens.length)\n return end_of_stream;\n return this.tokens.shift();\n },\n\n /**\n * When one or more tokens are prepended to a stream, those tokens\n * must be inserted, in given order, before the first token in the\n * stream.\n *\n * @param {(number|!Array.)} token The token(s) to prepend to the stream.\n */\n prepend: function(token) {\n if (Array.isArray(token)) {\n var tokens = /**@type {!Array.}*/(token);\n while (tokens.length)\n this.tokens.unshift(tokens.pop());\n } else {\n this.tokens.unshift(token);\n }\n },\n\n /**\n * When one or more tokens are pushed to a stream, those tokens\n * must be inserted, in given order, after the last token in the\n * stream.\n *\n * @param {(number|!Array.)} token The tokens(s) to prepend to the stream.\n */\n push: function(token) {\n if (Array.isArray(token)) {\n var tokens = /**@type {!Array.}*/(token);\n while (tokens.length)\n this.tokens.push(tokens.shift());\n } else {\n this.tokens.push(token);\n }\n }\n};\n\n//\n// 4. Encodings\n//\n\n// 4.1 Encoders and decoders\n\n/** @const */\nvar finished = -1;\n\n/**\n * @param {boolean} fatal If true, decoding errors raise an exception.\n * @param {number=} opt_code_point Override the standard fallback code point.\n * @return {number} The code point to insert on a decoding error.\n */\nfunction decoderError(fatal, opt_code_point) {\n if (fatal)\n throw TypeError('Decoder error');\n return opt_code_point || 0xFFFD;\n}\n\n//\n// 7. API\n//\n\n/** @const */ var DEFAULT_ENCODING = 'utf-8';\n\n// 7.1 Interface TextDecoder\n\n/**\n * @constructor\n * @param {string=} encoding The label of the encoding;\n * defaults to 'utf-8'.\n * @param {Object=} options\n */\nfunction TextDecoder(encoding, options) {\n if (!(this instanceof TextDecoder)) {\n return new TextDecoder(encoding, options);\n }\n encoding = encoding !== undefined ? String(encoding).toLowerCase() : DEFAULT_ENCODING;\n if (encoding !== DEFAULT_ENCODING) {\n throw new Error('Encoding not supported. Only utf-8 is supported');\n }\n options = ToDictionary(options);\n\n /** @private @type {boolean} */\n this._streaming = false;\n /** @private @type {boolean} */\n this._BOMseen = false;\n /** @private @type {?Decoder} */\n this._decoder = null;\n /** @private @type {boolean} */\n this._fatal = Boolean(options['fatal']);\n /** @private @type {boolean} */\n this._ignoreBOM = Boolean(options['ignoreBOM']);\n\n Object.defineProperty(this, 'encoding', {value: 'utf-8'});\n Object.defineProperty(this, 'fatal', {value: this._fatal});\n Object.defineProperty(this, 'ignoreBOM', {value: this._ignoreBOM});\n}\n\nTextDecoder.prototype = {\n /**\n * @param {ArrayBufferView=} input The buffer of bytes to decode.\n * @param {Object=} options\n * @return {string} The decoded string.\n */\n decode: function decode(input, options) {\n var bytes;\n if (typeof input === 'object' && input instanceof ArrayBuffer) {\n bytes = new Uint8Array(input);\n } else if (typeof input === 'object' && 'buffer' in input &&\n input.buffer instanceof ArrayBuffer) {\n bytes = new Uint8Array(input.buffer,\n input.byteOffset,\n input.byteLength);\n } else {\n bytes = new Uint8Array(0);\n }\n\n options = ToDictionary(options);\n\n if (!this._streaming) {\n this._decoder = new UTF8Decoder({fatal: this._fatal});\n this._BOMseen = false;\n }\n this._streaming = Boolean(options['stream']);\n\n var input_stream = new Stream(bytes);\n\n var code_points = [];\n\n /** @type {?(number|!Array.)} */\n var result;\n\n while (!input_stream.endOfStream()) {\n result = this._decoder.handler(input_stream, input_stream.read());\n if (result === finished)\n break;\n if (result === null)\n continue;\n if (Array.isArray(result))\n code_points.push.apply(code_points, /**@type {!Array.}*/(result));\n else\n code_points.push(result);\n }\n if (!this._streaming) {\n do {\n result = this._decoder.handler(input_stream, input_stream.read());\n if (result === finished)\n break;\n if (result === null)\n continue;\n if (Array.isArray(result))\n code_points.push.apply(code_points, /**@type {!Array.}*/(result));\n else\n code_points.push(result);\n } while (!input_stream.endOfStream());\n this._decoder = null;\n }\n\n if (code_points.length) {\n // If encoding is one of utf-8, utf-16be, and utf-16le, and\n // ignore BOM flag and BOM seen flag are unset, run these\n // subsubsteps:\n if (['utf-8'].indexOf(this.encoding) !== -1 &&\n !this._ignoreBOM && !this._BOMseen) {\n // If token is U+FEFF, set BOM seen flag.\n if (code_points[0] === 0xFEFF) {\n this._BOMseen = true;\n code_points.shift();\n } else {\n // Otherwise, if token is not end-of-stream, set BOM seen\n // flag and append token to output.\n this._BOMseen = true;\n }\n }\n }\n\n return codePointsToString(code_points);\n }\n};\n\n// 7.2 Interface TextEncoder\n\n/**\n * @constructor\n * @param {string=} encoding The label of the encoding;\n * defaults to 'utf-8'.\n * @param {Object=} options\n */\nfunction TextEncoder(encoding, options) {\n if (!(this instanceof TextEncoder))\n return new TextEncoder(encoding, options);\n encoding = encoding !== undefined ? String(encoding).toLowerCase() : DEFAULT_ENCODING;\n if (encoding !== DEFAULT_ENCODING) {\n throw new Error('Encoding not supported. Only utf-8 is supported');\n }\n options = ToDictionary(options);\n\n /** @private @type {boolean} */\n this._streaming = false;\n /** @private @type {?Encoder} */\n this._encoder = null;\n /** @private @type {{fatal: boolean}} */\n this._options = {fatal: Boolean(options['fatal'])};\n\n Object.defineProperty(this, 'encoding', {value: 'utf-8'});\n}\n\nTextEncoder.prototype = {\n /**\n * @param {string=} opt_string The string to encode.\n * @param {Object=} options\n * @return {Uint8Array} Encoded bytes, as a Uint8Array.\n */\n encode: function encode(opt_string, options) {\n opt_string = opt_string ? String(opt_string) : '';\n options = ToDictionary(options);\n\n // NOTE: This option is nonstandard. None of the encodings\n // permitted for encoding (i.e. UTF-8, UTF-16) are stateful,\n // so streaming is not necessary.\n if (!this._streaming)\n this._encoder = new UTF8Encoder(this._options);\n this._streaming = Boolean(options['stream']);\n\n var bytes = [];\n var input_stream = new Stream(stringToCodePoints(opt_string));\n /** @type {?(number|!Array.)} */\n var result;\n while (!input_stream.endOfStream()) {\n result = this._encoder.handler(input_stream, input_stream.read());\n if (result === finished)\n break;\n if (Array.isArray(result))\n bytes.push.apply(bytes, /**@type {!Array.}*/(result));\n else\n bytes.push(result);\n }\n if (!this._streaming) {\n while (true) {\n result = this._encoder.handler(input_stream, input_stream.read());\n if (result === finished)\n break;\n if (Array.isArray(result))\n bytes.push.apply(bytes, /**@type {!Array.}*/(result));\n else\n bytes.push(result);\n }\n this._encoder = null;\n }\n return new Uint8Array(bytes);\n }\n};\n\n//\n// 8. The encoding\n//\n\n// 8.1 utf-8\n\n/**\n * @constructor\n * @implements {Decoder}\n * @param {{fatal: boolean}} options\n */\nfunction UTF8Decoder(options) {\n var fatal = options.fatal;\n\n // utf-8's decoder's has an associated utf-8 code point, utf-8\n // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8\n // lower boundary (initially 0x80), and a utf-8 upper boundary\n // (initially 0xBF).\n var /** @type {number} */ utf8_code_point = 0,\n /** @type {number} */ utf8_bytes_seen = 0,\n /** @type {number} */ utf8_bytes_needed = 0,\n /** @type {number} */ utf8_lower_boundary = 0x80,\n /** @type {number} */ utf8_upper_boundary = 0xBF;\n\n /**\n * @param {Stream} stream The stream of bytes being decoded.\n * @param {number} bite The next byte read from the stream.\n * @return {?(number|!Array.)} The next code point(s)\n * decoded, or null if not enough data exists in the input\n * stream to decode a complete code point.\n */\n this.handler = function(stream, bite) {\n // 1. If byte is end-of-stream and utf-8 bytes needed is not 0,\n // set utf-8 bytes needed to 0 and return error.\n if (bite === end_of_stream && utf8_bytes_needed !== 0) {\n utf8_bytes_needed = 0;\n return decoderError(fatal);\n }\n\n // 2. If byte is end-of-stream, return finished.\n if (bite === end_of_stream)\n return finished;\n\n // 3. If utf-8 bytes needed is 0, based on byte:\n if (utf8_bytes_needed === 0) {\n\n // 0x00 to 0x7F\n if (inRange(bite, 0x00, 0x7F)) {\n // Return a code point whose value is byte.\n return bite;\n }\n\n // 0xC2 to 0xDF\n if (inRange(bite, 0xC2, 0xDF)) {\n // Set utf-8 bytes needed to 1 and utf-8 code point to byte\n // − 0xC0.\n utf8_bytes_needed = 1;\n utf8_code_point = bite - 0xC0;\n }\n\n // 0xE0 to 0xEF\n else if (inRange(bite, 0xE0, 0xEF)) {\n // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0.\n if (bite === 0xE0)\n utf8_lower_boundary = 0xA0;\n // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F.\n if (bite === 0xED)\n utf8_upper_boundary = 0x9F;\n // 3. Set utf-8 bytes needed to 2 and utf-8 code point to\n // byte − 0xE0.\n utf8_bytes_needed = 2;\n utf8_code_point = bite - 0xE0;\n }\n\n // 0xF0 to 0xF4\n else if (inRange(bite, 0xF0, 0xF4)) {\n // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90.\n if (bite === 0xF0)\n utf8_lower_boundary = 0x90;\n // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F.\n if (bite === 0xF4)\n utf8_upper_boundary = 0x8F;\n // 3. Set utf-8 bytes needed to 3 and utf-8 code point to\n // byte − 0xF0.\n utf8_bytes_needed = 3;\n utf8_code_point = bite - 0xF0;\n }\n\n // Otherwise\n else {\n // Return error.\n return decoderError(fatal);\n }\n\n // Then (byte is in the range 0xC2 to 0xF4) set utf-8 code\n // point to utf-8 code point << (6 × utf-8 bytes needed) and\n // return continue.\n utf8_code_point = utf8_code_point << (6 * utf8_bytes_needed);\n return null;\n }\n\n // 4. If byte is not in the range utf-8 lower boundary to utf-8\n // upper boundary, run these substeps:\n if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) {\n\n // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8\n // bytes seen to 0, set utf-8 lower boundary to 0x80, and set\n // utf-8 upper boundary to 0xBF.\n utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;\n utf8_lower_boundary = 0x80;\n utf8_upper_boundary = 0xBF;\n\n // 2. Prepend byte to stream.\n stream.prepend(bite);\n\n // 3. Return error.\n return decoderError(fatal);\n }\n\n // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary\n // to 0xBF.\n utf8_lower_boundary = 0x80;\n utf8_upper_boundary = 0xBF;\n\n // 6. Increase utf-8 bytes seen by one and set utf-8 code point\n // to utf-8 code point + (byte − 0x80) << (6 × (utf-8 bytes\n // needed − utf-8 bytes seen)).\n utf8_bytes_seen += 1;\n utf8_code_point += (bite - 0x80) << (6 * (utf8_bytes_needed - utf8_bytes_seen));\n\n // 7. If utf-8 bytes seen is not equal to utf-8 bytes needed,\n // continue.\n if (utf8_bytes_seen !== utf8_bytes_needed)\n return null;\n\n // 8. Let code point be utf-8 code point.\n var code_point = utf8_code_point;\n\n // 9. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes\n // seen to 0.\n utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;\n\n // 10. Return a code point whose value is code point.\n return code_point;\n };\n}\n\n/**\n * @constructor\n * @implements {Encoder}\n * @param {{fatal: boolean}} options\n */\nfunction UTF8Encoder(options) {\n var fatal = options.fatal;\n /**\n * @param {Stream} stream Input stream.\n * @param {number} code_point Next code point read from the stream.\n * @return {(number|!Array.)} Byte(s) to emit.\n */\n this.handler = function(stream, code_point) {\n // 1. If code point is end-of-stream, return finished.\n if (code_point === end_of_stream)\n return finished;\n\n // 2. If code point is in the range U+0000 to U+007F, return a\n // byte whose value is code point.\n if (inRange(code_point, 0x0000, 0x007f))\n return code_point;\n\n // 3. Set count and offset based on the range code point is in:\n var count, offset;\n // U+0080 to U+07FF: 1 and 0xC0\n if (inRange(code_point, 0x0080, 0x07FF)) {\n count = 1;\n offset = 0xC0;\n }\n // U+0800 to U+FFFF: 2 and 0xE0\n else if (inRange(code_point, 0x0800, 0xFFFF)) {\n count = 2;\n offset = 0xE0;\n }\n // U+10000 to U+10FFFF: 3 and 0xF0\n else if (inRange(code_point, 0x10000, 0x10FFFF)) {\n count = 3;\n offset = 0xF0;\n }\n\n // 4.Let bytes be a byte sequence whose first byte is (code\n // point >> (6 × count)) + offset.\n var bytes = [(code_point >> (6 * count)) + offset];\n\n // 5. Run these substeps while count is greater than 0:\n while (count > 0) {\n\n // 1. Set temp to code point >> (6 × (count − 1)).\n var temp = code_point >> (6 * (count - 1));\n\n // 2. Append to bytes 0x80 | (temp & 0x3F).\n bytes.push(0x80 | (temp & 0x3F));\n\n // 3. Decrease count by one.\n count -= 1;\n }\n\n // 6. Return bytes bytes, in order.\n return bytes;\n };\n}\n\nexports.TextEncoder = TextEncoder;\nexports.TextDecoder = TextDecoder;","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deserializeUnchecked = exports.deserialize = exports.serialize = exports.BinaryReader = exports.BinaryWriter = exports.BorshError = exports.baseDecode = exports.baseEncode = void 0;\nconst bn_js_1 = __importDefault(require(\"bn.js\"));\nconst bs58_1 = __importDefault(require(\"bs58\"));\n// TODO: Make sure this polyfill not included when not required\nconst encoding = __importStar(require(\"text-encoding-utf-8\"));\nconst ResolvedTextDecoder = typeof TextDecoder !== \"function\" ? encoding.TextDecoder : TextDecoder;\nconst textDecoder = new ResolvedTextDecoder(\"utf-8\", { fatal: true });\nfunction baseEncode(value) {\n if (typeof value === \"string\") {\n value = Buffer.from(value, \"utf8\");\n }\n return bs58_1.default.encode(Buffer.from(value));\n}\nexports.baseEncode = baseEncode;\nfunction baseDecode(value) {\n return Buffer.from(bs58_1.default.decode(value));\n}\nexports.baseDecode = baseDecode;\nconst INITIAL_LENGTH = 1024;\nclass BorshError extends Error {\n constructor(message) {\n super(message);\n this.fieldPath = [];\n this.originalMessage = message;\n }\n addToFieldPath(fieldName) {\n this.fieldPath.splice(0, 0, fieldName);\n // NOTE: Modifying message directly as jest doesn't use .toString()\n this.message = this.originalMessage + \": \" + this.fieldPath.join(\".\");\n }\n}\nexports.BorshError = BorshError;\n/// Binary encoder.\nclass BinaryWriter {\n constructor() {\n this.buf = Buffer.alloc(INITIAL_LENGTH);\n this.length = 0;\n }\n maybeResize() {\n if (this.buf.length < 16 + this.length) {\n this.buf = Buffer.concat([this.buf, Buffer.alloc(INITIAL_LENGTH)]);\n }\n }\n writeU8(value) {\n this.maybeResize();\n this.buf.writeUInt8(value, this.length);\n this.length += 1;\n }\n writeU16(value) {\n this.maybeResize();\n this.buf.writeUInt16LE(value, this.length);\n this.length += 2;\n }\n writeU32(value) {\n this.maybeResize();\n this.buf.writeUInt32LE(value, this.length);\n this.length += 4;\n }\n writeU64(value) {\n this.maybeResize();\n this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray(\"le\", 8)));\n }\n writeU128(value) {\n this.maybeResize();\n this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray(\"le\", 16)));\n }\n writeU256(value) {\n this.maybeResize();\n this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray(\"le\", 32)));\n }\n writeU512(value) {\n this.maybeResize();\n this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray(\"le\", 64)));\n }\n writeBuffer(buffer) {\n // Buffer.from is needed as this.buf.subarray can return plain Uint8Array in browser\n this.buf = Buffer.concat([\n Buffer.from(this.buf.subarray(0, this.length)),\n buffer,\n Buffer.alloc(INITIAL_LENGTH),\n ]);\n this.length += buffer.length;\n }\n writeString(str) {\n this.maybeResize();\n const b = Buffer.from(str, \"utf8\");\n this.writeU32(b.length);\n this.writeBuffer(b);\n }\n writeFixedArray(array) {\n this.writeBuffer(Buffer.from(array));\n }\n writeArray(array, fn) {\n this.maybeResize();\n this.writeU32(array.length);\n for (const elem of array) {\n this.maybeResize();\n fn(elem);\n }\n }\n toArray() {\n return this.buf.subarray(0, this.length);\n }\n}\nexports.BinaryWriter = BinaryWriter;\nfunction handlingRangeError(target, propertyKey, propertyDescriptor) {\n const originalMethod = propertyDescriptor.value;\n propertyDescriptor.value = function (...args) {\n try {\n return originalMethod.apply(this, args);\n }\n catch (e) {\n if (e instanceof RangeError) {\n const code = e.code;\n if ([\"ERR_BUFFER_OUT_OF_BOUNDS\", \"ERR_OUT_OF_RANGE\"].indexOf(code) >= 0) {\n throw new BorshError(\"Reached the end of buffer when deserializing\");\n }\n }\n throw e;\n }\n };\n}\nclass BinaryReader {\n constructor(buf) {\n this.buf = buf;\n this.offset = 0;\n }\n readU8() {\n const value = this.buf.readUInt8(this.offset);\n this.offset += 1;\n return value;\n }\n readU16() {\n const value = this.buf.readUInt16LE(this.offset);\n this.offset += 2;\n return value;\n }\n readU32() {\n const value = this.buf.readUInt32LE(this.offset);\n this.offset += 4;\n return value;\n }\n readU64() {\n const buf = this.readBuffer(8);\n return new bn_js_1.default(buf, \"le\");\n }\n readU128() {\n const buf = this.readBuffer(16);\n return new bn_js_1.default(buf, \"le\");\n }\n readU256() {\n const buf = this.readBuffer(32);\n return new bn_js_1.default(buf, \"le\");\n }\n readU512() {\n const buf = this.readBuffer(64);\n return new bn_js_1.default(buf, \"le\");\n }\n readBuffer(len) {\n if (this.offset + len > this.buf.length) {\n throw new BorshError(`Expected buffer length ${len} isn't within bounds`);\n }\n const result = this.buf.slice(this.offset, this.offset + len);\n this.offset += len;\n return result;\n }\n readString() {\n const len = this.readU32();\n const buf = this.readBuffer(len);\n try {\n // NOTE: Using TextDecoder to fail on invalid UTF-8\n return textDecoder.decode(buf);\n }\n catch (e) {\n throw new BorshError(`Error decoding UTF-8 string: ${e}`);\n }\n }\n readFixedArray(len) {\n return new Uint8Array(this.readBuffer(len));\n }\n readArray(fn) {\n const len = this.readU32();\n const result = Array();\n for (let i = 0; i < len; ++i) {\n result.push(fn());\n }\n return result;\n }\n}\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readU8\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readU16\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readU32\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readU64\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readU128\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readU256\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readU512\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readString\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readFixedArray\", null);\n__decorate([\n handlingRangeError\n], BinaryReader.prototype, \"readArray\", null);\nexports.BinaryReader = BinaryReader;\nfunction capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nfunction serializeField(schema, fieldName, value, fieldType, writer) {\n try {\n // TODO: Handle missing values properly (make sure they never result in just skipped write)\n if (typeof fieldType === \"string\") {\n writer[`write${capitalizeFirstLetter(fieldType)}`](value);\n }\n else if (fieldType instanceof Array) {\n if (typeof fieldType[0] === \"number\") {\n if (value.length !== fieldType[0]) {\n throw new BorshError(`Expecting byte array of length ${fieldType[0]}, but got ${value.length} bytes`);\n }\n writer.writeFixedArray(value);\n }\n else if (fieldType.length === 2 && typeof fieldType[1] === \"number\") {\n if (value.length !== fieldType[1]) {\n throw new BorshError(`Expecting byte array of length ${fieldType[1]}, but got ${value.length} bytes`);\n }\n for (let i = 0; i < fieldType[1]; i++) {\n serializeField(schema, null, value[i], fieldType[0], writer);\n }\n }\n else {\n writer.writeArray(value, (item) => {\n serializeField(schema, fieldName, item, fieldType[0], writer);\n });\n }\n }\n else if (fieldType.kind !== undefined) {\n switch (fieldType.kind) {\n case \"option\": {\n if (value === null || value === undefined) {\n writer.writeU8(0);\n }\n else {\n writer.writeU8(1);\n serializeField(schema, fieldName, value, fieldType.type, writer);\n }\n break;\n }\n case \"map\": {\n writer.writeU32(value.size);\n value.forEach((val, key) => {\n serializeField(schema, fieldName, key, fieldType.key, writer);\n serializeField(schema, fieldName, val, fieldType.value, writer);\n });\n break;\n }\n default:\n throw new BorshError(`FieldType ${fieldType} unrecognized`);\n }\n }\n else {\n serializeStruct(schema, value, writer);\n }\n }\n catch (error) {\n if (error instanceof BorshError) {\n error.addToFieldPath(fieldName);\n }\n throw error;\n }\n}\nfunction serializeStruct(schema, obj, writer) {\n if (typeof obj.borshSerialize === \"function\") {\n obj.borshSerialize(writer);\n return;\n }\n const structSchema = schema.get(obj.constructor);\n if (!structSchema) {\n throw new BorshError(`Class ${obj.constructor.name} is missing in schema`);\n }\n if (structSchema.kind === \"struct\") {\n structSchema.fields.map(([fieldName, fieldType]) => {\n serializeField(schema, fieldName, obj[fieldName], fieldType, writer);\n });\n }\n else if (structSchema.kind === \"enum\") {\n const name = obj[structSchema.field];\n for (let idx = 0; idx < structSchema.values.length; ++idx) {\n const [fieldName, fieldType] = structSchema.values[idx];\n if (fieldName === name) {\n writer.writeU8(idx);\n serializeField(schema, fieldName, obj[fieldName], fieldType, writer);\n break;\n }\n }\n }\n else {\n throw new BorshError(`Unexpected schema kind: ${structSchema.kind} for ${obj.constructor.name}`);\n }\n}\n/// Serialize given object using schema of the form:\n/// { class_name -> [ [field_name, field_type], .. ], .. }\nfunction serialize(schema, obj, Writer = BinaryWriter) {\n const writer = new Writer();\n serializeStruct(schema, obj, writer);\n return writer.toArray();\n}\nexports.serialize = serialize;\nfunction deserializeField(schema, fieldName, fieldType, reader) {\n try {\n if (typeof fieldType === \"string\") {\n return reader[`read${capitalizeFirstLetter(fieldType)}`]();\n }\n if (fieldType instanceof Array) {\n if (typeof fieldType[0] === \"number\") {\n return reader.readFixedArray(fieldType[0]);\n }\n else if (typeof fieldType[1] === \"number\") {\n const arr = [];\n for (let i = 0; i < fieldType[1]; i++) {\n arr.push(deserializeField(schema, null, fieldType[0], reader));\n }\n return arr;\n }\n else {\n return reader.readArray(() => deserializeField(schema, fieldName, fieldType[0], reader));\n }\n }\n if (fieldType.kind === \"option\") {\n const option = reader.readU8();\n if (option) {\n return deserializeField(schema, fieldName, fieldType.type, reader);\n }\n return undefined;\n }\n if (fieldType.kind === \"map\") {\n let map = new Map();\n const length = reader.readU32();\n for (let i = 0; i < length; i++) {\n const key = deserializeField(schema, fieldName, fieldType.key, reader);\n const val = deserializeField(schema, fieldName, fieldType.value, reader);\n map.set(key, val);\n }\n return map;\n }\n return deserializeStruct(schema, fieldType, reader);\n }\n catch (error) {\n if (error instanceof BorshError) {\n error.addToFieldPath(fieldName);\n }\n throw error;\n }\n}\nfunction deserializeStruct(schema, classType, reader) {\n if (typeof classType.borshDeserialize === \"function\") {\n return classType.borshDeserialize(reader);\n }\n const structSchema = schema.get(classType);\n if (!structSchema) {\n throw new BorshError(`Class ${classType.name} is missing in schema`);\n }\n if (structSchema.kind === \"struct\") {\n const result = {};\n for (const [fieldName, fieldType] of schema.get(classType).fields) {\n result[fieldName] = deserializeField(schema, fieldName, fieldType, reader);\n }\n return new classType(result);\n }\n if (structSchema.kind === \"enum\") {\n const idx = reader.readU8();\n if (idx >= structSchema.values.length) {\n throw new BorshError(`Enum index: ${idx} is out of range`);\n }\n const [fieldName, fieldType] = structSchema.values[idx];\n const fieldValue = deserializeField(schema, fieldName, fieldType, reader);\n return new classType({ [fieldName]: fieldValue });\n }\n throw new BorshError(`Unexpected schema kind: ${structSchema.kind} for ${classType.constructor.name}`);\n}\n/// Deserializes object from bytes using schema.\nfunction deserialize(schema, classType, buffer, Reader = BinaryReader) {\n const reader = new Reader(buffer);\n const result = deserializeStruct(schema, classType, reader);\n if (reader.offset < buffer.length) {\n throw new BorshError(`Unexpected ${buffer.length - reader.offset} bytes after deserialized data`);\n }\n return result;\n}\nexports.deserialize = deserialize;\n/// Deserializes object from bytes using schema, without checking the length read\nfunction deserializeUnchecked(schema, classType, buffer, Reader = BinaryReader) {\n const reader = new Reader(buffer);\n return deserializeStruct(schema, classType, reader);\n}\nexports.deserializeUnchecked = deserializeUnchecked;\n","import {Buffer} from 'buffer';\nimport {serialize, deserialize, deserializeUnchecked} from 'borsh';\n\n// Class wrapping a plain object\nexport class Struct {\n constructor(properties: any) {\n Object.assign(this, properties);\n }\n\n encode(): Buffer {\n return Buffer.from(serialize(SOLANA_SCHEMA, this));\n }\n\n static decode(data: Buffer): any {\n return deserialize(SOLANA_SCHEMA, this, data);\n }\n\n static decodeUnchecked(data: Buffer): any {\n return deserializeUnchecked(SOLANA_SCHEMA, this, data);\n }\n}\n\n// Class representing a Rust-compatible enum, since enums are only strings or\n// numbers in pure JS\nexport class Enum extends Struct {\n enum: string = '';\n constructor(properties: any) {\n super(properties);\n if (Object.keys(properties).length !== 1) {\n throw new Error('Enum can only take single value');\n }\n Object.keys(properties).map(key => {\n this.enum = key;\n });\n }\n}\n\nexport const SOLANA_SCHEMA: Map = new Map();\n","import BN from 'bn.js';\nimport bs58 from 'bs58';\nimport {Buffer} from 'buffer';\nimport {sha256} from '@noble/hashes/sha256';\n\nimport {isOnCurve} from './utils/ed25519';\nimport {Struct, SOLANA_SCHEMA} from './utils/borsh-schema';\nimport {toBuffer} from './utils/to-buffer';\n\n/**\n * Maximum length of derived pubkey seed\n */\nexport const MAX_SEED_LENGTH = 32;\n\n/**\n * Size of public key in bytes\n */\nexport const PUBLIC_KEY_LENGTH = 32;\n\n/**\n * Value to be converted into public key\n */\nexport type PublicKeyInitData =\n | number\n | string\n | Uint8Array\n | Array\n | PublicKeyData;\n\n/**\n * JSON object representation of PublicKey class\n */\nexport type PublicKeyData = {\n /** @internal */\n _bn: BN;\n};\n\nfunction isPublicKeyData(value: PublicKeyInitData): value is PublicKeyData {\n return (value as PublicKeyData)._bn !== undefined;\n}\n\n// local counter used by PublicKey.unique()\nlet uniquePublicKeyCounter = 1;\n\n/**\n * A public key\n */\nexport class PublicKey extends Struct {\n /** @internal */\n _bn: BN;\n\n /**\n * Create a new PublicKey object\n * @param value ed25519 public key as buffer or base-58 encoded string\n */\n constructor(value: PublicKeyInitData) {\n super({});\n if (isPublicKeyData(value)) {\n this._bn = value._bn;\n } else {\n if (typeof value === 'string') {\n // assume base 58 encoding by default\n const decoded = bs58.decode(value);\n if (decoded.length != PUBLIC_KEY_LENGTH) {\n throw new Error(`Invalid public key input`);\n }\n this._bn = new BN(decoded);\n } else {\n this._bn = new BN(value);\n }\n\n if (this._bn.byteLength() > PUBLIC_KEY_LENGTH) {\n throw new Error(`Invalid public key input`);\n }\n }\n }\n\n /**\n * Returns a unique PublicKey for tests and benchmarks using a counter\n */\n static unique(): PublicKey {\n const key = new PublicKey(uniquePublicKeyCounter);\n uniquePublicKeyCounter += 1;\n return new PublicKey(key.toBuffer());\n }\n\n /**\n * Default public key value. The base58-encoded string representation is all ones (as seen below)\n * The underlying BN number is 32 bytes that are all zeros\n */\n static default: PublicKey = new PublicKey('11111111111111111111111111111111');\n\n /**\n * Checks if two publicKeys are equal\n */\n equals(publicKey: PublicKey): boolean {\n return this._bn.eq(publicKey._bn);\n }\n\n /**\n * Return the base-58 representation of the public key\n */\n toBase58(): string {\n return bs58.encode(this.toBytes());\n }\n\n toJSON(): string {\n return this.toBase58();\n }\n\n /**\n * Return the byte array representation of the public key in big endian\n */\n toBytes(): Uint8Array {\n const buf = this.toBuffer();\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n\n /**\n * Return the Buffer representation of the public key in big endian\n */\n toBuffer(): Buffer {\n const b = this._bn.toArrayLike(Buffer);\n if (b.length === PUBLIC_KEY_LENGTH) {\n return b;\n }\n\n const zeroPad = Buffer.alloc(32);\n b.copy(zeroPad, 32 - b.length);\n return zeroPad;\n }\n\n get [Symbol.toStringTag](): string {\n return `PublicKey(${this.toString()})`;\n }\n\n /**\n * Return the base-58 representation of the public key\n */\n toString(): string {\n return this.toBase58();\n }\n\n /**\n * Derive a public key from another key, a seed, and a program ID.\n * The program ID will also serve as the owner of the public key, giving\n * it permission to write data to the account.\n */\n /* eslint-disable require-await */\n static async createWithSeed(\n fromPublicKey: PublicKey,\n seed: string,\n programId: PublicKey,\n ): Promise {\n const buffer = Buffer.concat([\n fromPublicKey.toBuffer(),\n Buffer.from(seed),\n programId.toBuffer(),\n ]);\n const publicKeyBytes = sha256(buffer);\n return new PublicKey(publicKeyBytes);\n }\n\n /**\n * Derive a program address from seeds and a program ID.\n */\n /* eslint-disable require-await */\n static createProgramAddressSync(\n seeds: Array,\n programId: PublicKey,\n ): PublicKey {\n let buffer = Buffer.alloc(0);\n seeds.forEach(function (seed) {\n if (seed.length > MAX_SEED_LENGTH) {\n throw new TypeError(`Max seed length exceeded`);\n }\n buffer = Buffer.concat([buffer, toBuffer(seed)]);\n });\n buffer = Buffer.concat([\n buffer,\n programId.toBuffer(),\n Buffer.from('ProgramDerivedAddress'),\n ]);\n const publicKeyBytes = sha256(buffer);\n if (isOnCurve(publicKeyBytes)) {\n throw new Error(`Invalid seeds, address must fall off the curve`);\n }\n return new PublicKey(publicKeyBytes);\n }\n\n /**\n * Async version of createProgramAddressSync\n * For backwards compatibility\n *\n * @deprecated Use {@link createProgramAddressSync} instead\n */\n /* eslint-disable require-await */\n static async createProgramAddress(\n seeds: Array,\n programId: PublicKey,\n ): Promise {\n return this.createProgramAddressSync(seeds, programId);\n }\n\n /**\n * Find a valid program address\n *\n * Valid program addresses must fall off the ed25519 curve. This function\n * iterates a nonce until it finds one that when combined with the seeds\n * results in a valid program address.\n */\n static findProgramAddressSync(\n seeds: Array,\n programId: PublicKey,\n ): [PublicKey, number] {\n let nonce = 255;\n let address;\n while (nonce != 0) {\n try {\n const seedsWithNonce = seeds.concat(Buffer.from([nonce]));\n address = this.createProgramAddressSync(seedsWithNonce, programId);\n } catch (err) {\n if (err instanceof TypeError) {\n throw err;\n }\n nonce--;\n continue;\n }\n return [address, nonce];\n }\n throw new Error(`Unable to find a viable program address nonce`);\n }\n\n /**\n * Async version of findProgramAddressSync\n * For backwards compatibility\n *\n * @deprecated Use {@link findProgramAddressSync} instead\n */\n static async findProgramAddress(\n seeds: Array,\n programId: PublicKey,\n ): Promise<[PublicKey, number]> {\n return this.findProgramAddressSync(seeds, programId);\n }\n\n /**\n * Check that a pubkey is on the ed25519 curve.\n */\n static isOnCurve(pubkeyData: PublicKeyInitData): boolean {\n const pubkey = new PublicKey(pubkeyData);\n return isOnCurve(pubkey.toBytes());\n }\n}\n\nSOLANA_SCHEMA.set(PublicKey, {\n kind: 'struct',\n fields: [['_bn', 'u256']],\n});\n","import {Buffer} from 'buffer';\n\nimport {generatePrivateKey, getPublicKey} from './utils/ed25519';\nimport {toBuffer} from './utils/to-buffer';\nimport {PublicKey} from './publickey';\n\n/**\n * An account key pair (public and secret keys).\n *\n * @deprecated since v1.10.0, please use {@link Keypair} instead.\n */\nexport class Account {\n /** @internal */\n private _publicKey: Buffer;\n /** @internal */\n private _secretKey: Buffer;\n\n /**\n * Create a new Account object\n *\n * If the secretKey parameter is not provided a new key pair is randomly\n * created for the account\n *\n * @param secretKey Secret key for the account\n */\n constructor(secretKey?: Uint8Array | Array) {\n if (secretKey) {\n const secretKeyBuffer = toBuffer(secretKey);\n if (secretKey.length !== 64) {\n throw new Error('bad secret key size');\n }\n this._publicKey = secretKeyBuffer.slice(32, 64);\n this._secretKey = secretKeyBuffer.slice(0, 32);\n } else {\n this._secretKey = toBuffer(generatePrivateKey());\n this._publicKey = toBuffer(getPublicKey(this._secretKey));\n }\n }\n\n /**\n * The public key for this account\n */\n get publicKey(): PublicKey {\n return new PublicKey(this._publicKey);\n }\n\n /**\n * The **unencrypted** secret key for this account. The first 32 bytes\n * is the private scalar and the last 32 bytes is the public key.\n * Read more: https://blog.mozilla.org/warner/2011/11/29/ed25519-keys/\n */\n get secretKey(): Buffer {\n return Buffer.concat([this._secretKey, this._publicKey], 64);\n }\n}\n","import {PublicKey} from './publickey';\n\nexport const BPF_LOADER_DEPRECATED_PROGRAM_ID = new PublicKey(\n 'BPFLoader1111111111111111111111111111111111',\n);\n","/* The MIT License (MIT)\n *\n * Copyright 2015-2018 Peter A. Bigot\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n/**\n * Support for translating between Uint8Array instances and JavaScript\n * native types.\n *\n * {@link module:Layout~Layout|Layout} is the basis of a class\n * hierarchy that associates property names with sequences of encoded\n * bytes.\n *\n * Layouts are supported for these scalar (numeric) types:\n * * {@link module:Layout~UInt|Unsigned integers in little-endian\n * format} with {@link module:Layout.u8|8-bit}, {@link\n * module:Layout.u16|16-bit}, {@link module:Layout.u24|24-bit},\n * {@link module:Layout.u32|32-bit}, {@link\n * module:Layout.u40|40-bit}, and {@link module:Layout.u48|48-bit}\n * representation ranges;\n * * {@link module:Layout~UIntBE|Unsigned integers in big-endian\n * format} with {@link module:Layout.u16be|16-bit}, {@link\n * module:Layout.u24be|24-bit}, {@link module:Layout.u32be|32-bit},\n * {@link module:Layout.u40be|40-bit}, and {@link\n * module:Layout.u48be|48-bit} representation ranges;\n * * {@link module:Layout~Int|Signed integers in little-endian\n * format} with {@link module:Layout.s8|8-bit}, {@link\n * module:Layout.s16|16-bit}, {@link module:Layout.s24|24-bit},\n * {@link module:Layout.s32|32-bit}, {@link\n * module:Layout.s40|40-bit}, and {@link module:Layout.s48|48-bit}\n * representation ranges;\n * * {@link module:Layout~IntBE|Signed integers in big-endian format}\n * with {@link module:Layout.s16be|16-bit}, {@link\n * module:Layout.s24be|24-bit}, {@link module:Layout.s32be|32-bit},\n * {@link module:Layout.s40be|40-bit}, and {@link\n * module:Layout.s48be|48-bit} representation ranges;\n * * 64-bit integral values that decode to an exact (if magnitude is\n * less than 2^53) or nearby integral Number in {@link\n * module:Layout.nu64|unsigned little-endian}, {@link\n * module:Layout.nu64be|unsigned big-endian}, {@link\n * module:Layout.ns64|signed little-endian}, and {@link\n * module:Layout.ns64be|unsigned big-endian} encodings;\n * * 32-bit floating point values with {@link\n * module:Layout.f32|little-endian} and {@link\n * module:Layout.f32be|big-endian} representations;\n * * 64-bit floating point values with {@link\n * module:Layout.f64|little-endian} and {@link\n * module:Layout.f64be|big-endian} representations;\n * * {@link module:Layout.const|Constants} that take no space in the\n * encoded expression.\n *\n * and for these aggregate types:\n * * {@link module:Layout.seq|Sequence}s of instances of a {@link\n * module:Layout~Layout|Layout}, with JavaScript representation as\n * an Array and constant or data-dependent {@link\n * module:Layout~Sequence#count|length};\n * * {@link module:Layout.struct|Structure}s that aggregate a\n * heterogeneous sequence of {@link module:Layout~Layout|Layout}\n * instances, with JavaScript representation as an Object;\n * * {@link module:Layout.union|Union}s that support multiple {@link\n * module:Layout~VariantLayout|variant layouts} over a fixed\n * (padded) or variable (not padded) span of bytes, using an\n * unsigned integer at the start of the data or a separate {@link\n * module:Layout.unionLayoutDiscriminator|layout element} to\n * determine which layout to use when interpreting the buffer\n * contents;\n * * {@link module:Layout.bits|BitStructure}s that contain a sequence\n * of individual {@link\n * module:Layout~BitStructure#addField|BitField}s packed into an 8,\n * 16, 24, or 32-bit unsigned integer starting at the least- or\n * most-significant bit;\n * * {@link module:Layout.cstr|C strings} of varying length;\n * * {@link module:Layout.blob|Blobs} of fixed- or variable-{@link\n * module:Layout~Blob#length|length} raw data.\n *\n * All {@link module:Layout~Layout|Layout} instances are immutable\n * after construction, to prevent internal state from becoming\n * inconsistent.\n *\n * @local Layout\n * @local ExternalLayout\n * @local GreedyCount\n * @local OffsetLayout\n * @local UInt\n * @local UIntBE\n * @local Int\n * @local IntBE\n * @local NearUInt64\n * @local NearUInt64BE\n * @local NearInt64\n * @local NearInt64BE\n * @local Float\n * @local FloatBE\n * @local Double\n * @local DoubleBE\n * @local Sequence\n * @local Structure\n * @local UnionDiscriminator\n * @local UnionLayoutDiscriminator\n * @local Union\n * @local VariantLayout\n * @local BitStructure\n * @local BitField\n * @local Boolean\n * @local Blob\n * @local CString\n * @local Constant\n * @local bindConstructorLayout\n * @module Layout\n * @license MIT\n * @author Peter A. Bigot\n * @see {@link https://github.com/pabigot/buffer-layout|buffer-layout on GitHub}\n */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.s16 = exports.s8 = exports.nu64be = exports.u48be = exports.u40be = exports.u32be = exports.u24be = exports.u16be = exports.nu64 = exports.u48 = exports.u40 = exports.u32 = exports.u24 = exports.u16 = exports.u8 = exports.offset = exports.greedy = exports.Constant = exports.UTF8 = exports.CString = exports.Blob = exports.Boolean = exports.BitField = exports.BitStructure = exports.VariantLayout = exports.Union = exports.UnionLayoutDiscriminator = exports.UnionDiscriminator = exports.Structure = exports.Sequence = exports.DoubleBE = exports.Double = exports.FloatBE = exports.Float = exports.NearInt64BE = exports.NearInt64 = exports.NearUInt64BE = exports.NearUInt64 = exports.IntBE = exports.Int = exports.UIntBE = exports.UInt = exports.OffsetLayout = exports.GreedyCount = exports.ExternalLayout = exports.bindConstructorLayout = exports.nameWithProperty = exports.Layout = exports.uint8ArrayToBuffer = exports.checkUint8Array = void 0;\nexports.constant = exports.utf8 = exports.cstr = exports.blob = exports.unionLayoutDiscriminator = exports.union = exports.seq = exports.bits = exports.struct = exports.f64be = exports.f64 = exports.f32be = exports.f32 = exports.ns64be = exports.s48be = exports.s40be = exports.s32be = exports.s24be = exports.s16be = exports.ns64 = exports.s48 = exports.s40 = exports.s32 = exports.s24 = void 0;\nconst buffer_1 = require(\"buffer\");\n/* Check if a value is a Uint8Array.\n *\n * @ignore */\nfunction checkUint8Array(b) {\n if (!(b instanceof Uint8Array)) {\n throw new TypeError('b must be a Uint8Array');\n }\n}\nexports.checkUint8Array = checkUint8Array;\n/* Create a Buffer instance from a Uint8Array.\n *\n * @ignore */\nfunction uint8ArrayToBuffer(b) {\n checkUint8Array(b);\n return buffer_1.Buffer.from(b.buffer, b.byteOffset, b.length);\n}\nexports.uint8ArrayToBuffer = uint8ArrayToBuffer;\n/**\n * Base class for layout objects.\n *\n * **NOTE** This is an abstract base class; you can create instances\n * if it amuses you, but they won't support the {@link\n * Layout#encode|encode} or {@link Layout#decode|decode} functions.\n *\n * @param {Number} span - Initializer for {@link Layout#span|span}. The\n * parameter must be an integer; a negative value signifies that the\n * span is {@link Layout#getSpan|value-specific}.\n *\n * @param {string} [property] - Initializer for {@link\n * Layout#property|property}.\n *\n * @abstract\n */\nclass Layout {\n constructor(span, property) {\n if (!Number.isInteger(span)) {\n throw new TypeError('span must be an integer');\n }\n /** The span of the layout in bytes.\n *\n * Positive values are generally expected.\n *\n * Zero will only appear in {@link Constant}s and in {@link\n * Sequence}s where the {@link Sequence#count|count} is zero.\n *\n * A negative value indicates that the span is value-specific, and\n * must be obtained using {@link Layout#getSpan|getSpan}. */\n this.span = span;\n /** The property name used when this layout is represented in an\n * Object.\n *\n * Used only for layouts that {@link Layout#decode|decode} to Object\n * instances. If left undefined the span of the unnamed layout will\n * be treated as padding: it will not be mutated by {@link\n * Layout#encode|encode} nor represented as a property in the\n * decoded Object. */\n this.property = property;\n }\n /** Function to create an Object into which decoded properties will\n * be written.\n *\n * Used only for layouts that {@link Layout#decode|decode} to Object\n * instances, which means:\n * * {@link Structure}\n * * {@link Union}\n * * {@link VariantLayout}\n * * {@link BitStructure}\n *\n * If left undefined the JavaScript representation of these layouts\n * will be Object instances.\n *\n * See {@link bindConstructorLayout}.\n */\n makeDestinationObject() {\n return {};\n }\n /**\n * Calculate the span of a specific instance of a layout.\n *\n * @param {Uint8Array} b - the buffer that contains an encoded instance.\n *\n * @param {Number} [offset] - the offset at which the encoded instance\n * starts. If absent a zero offset is inferred.\n *\n * @return {Number} - the number of bytes covered by the layout\n * instance. If this method is not overridden in a subclass the\n * definition-time constant {@link Layout#span|span} will be\n * returned.\n *\n * @throws {RangeError} - if the length of the value cannot be\n * determined.\n */\n getSpan(b, offset) {\n if (0 > this.span) {\n throw new RangeError('indeterminate span');\n }\n return this.span;\n }\n /**\n * Replicate the layout using a new property.\n *\n * This function must be used to get a structurally-equivalent layout\n * with a different name since all {@link Layout} instances are\n * immutable.\n *\n * **NOTE** This is a shallow copy. All fields except {@link\n * Layout#property|property} are strictly equal to the origin layout.\n *\n * @param {String} property - the value for {@link\n * Layout#property|property} in the replica.\n *\n * @returns {Layout} - the copy with {@link Layout#property|property}\n * set to `property`.\n */\n replicate(property) {\n const rv = Object.create(this.constructor.prototype);\n Object.assign(rv, this);\n rv.property = property;\n return rv;\n }\n /**\n * Create an object from layout properties and an array of values.\n *\n * **NOTE** This function returns `undefined` if invoked on a layout\n * that does not return its value as an Object. Objects are\n * returned for things that are a {@link Structure}, which includes\n * {@link VariantLayout|variant layouts} if they are structures, and\n * excludes {@link Union}s. If you want this feature for a union\n * you must use {@link Union.getVariant|getVariant} to select the\n * desired layout.\n *\n * @param {Array} values - an array of values that correspond to the\n * default order for properties. As with {@link Layout#decode|decode}\n * layout elements that have no property name are skipped when\n * iterating over the array values. Only the top-level properties are\n * assigned; arguments are not assigned to properties of contained\n * layouts. Any unused values are ignored.\n *\n * @return {(Object|undefined)}\n */\n fromArray(values) {\n return undefined;\n }\n}\nexports.Layout = Layout;\n/* Provide text that carries a name (such as for a function that will\n * be throwing an error) annotated with the property of a given layout\n * (such as one for which the value was unacceptable).\n *\n * @ignore */\nfunction nameWithProperty(name, lo) {\n if (lo.property) {\n return name + '[' + lo.property + ']';\n }\n return name;\n}\nexports.nameWithProperty = nameWithProperty;\n/**\n * Augment a class so that instances can be encoded/decoded using a\n * given layout.\n *\n * Calling this function couples `Class` with `layout` in several ways:\n *\n * * `Class.layout_` becomes a static member property equal to `layout`;\n * * `layout.boundConstructor_` becomes a static member property equal\n * to `Class`;\n * * The {@link Layout#makeDestinationObject|makeDestinationObject()}\n * property of `layout` is set to a function that returns a `new\n * Class()`;\n * * `Class.decode(b, offset)` becomes a static member function that\n * delegates to {@link Layout#decode|layout.decode}. The\n * synthesized function may be captured and extended.\n * * `Class.prototype.encode(b, offset)` provides an instance member\n * function that delegates to {@link Layout#encode|layout.encode}\n * with `src` set to `this`. The synthesized function may be\n * captured and extended, but when the extension is invoked `this`\n * must be explicitly bound to the instance.\n *\n * @param {class} Class - a JavaScript class with a nullary\n * constructor.\n *\n * @param {Layout} layout - the {@link Layout} instance used to encode\n * instances of `Class`.\n */\n// `Class` must be a constructor Function, but the assignment of a `layout_` property to it makes it difficult to type\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction bindConstructorLayout(Class, layout) {\n if ('function' !== typeof Class) {\n throw new TypeError('Class must be constructor');\n }\n if (Object.prototype.hasOwnProperty.call(Class, 'layout_')) {\n throw new Error('Class is already bound to a layout');\n }\n if (!(layout && (layout instanceof Layout))) {\n throw new TypeError('layout must be a Layout');\n }\n if (Object.prototype.hasOwnProperty.call(layout, 'boundConstructor_')) {\n throw new Error('layout is already bound to a constructor');\n }\n Class.layout_ = layout;\n layout.boundConstructor_ = Class;\n layout.makeDestinationObject = (() => new Class());\n Object.defineProperty(Class.prototype, 'encode', {\n value(b, offset) {\n return layout.encode(this, b, offset);\n },\n writable: true,\n });\n Object.defineProperty(Class, 'decode', {\n value(b, offset) {\n return layout.decode(b, offset);\n },\n writable: true,\n });\n}\nexports.bindConstructorLayout = bindConstructorLayout;\n/**\n * An object that behaves like a layout but does not consume space\n * within its containing layout.\n *\n * This is primarily used to obtain metadata about a member, such as a\n * {@link OffsetLayout} that can provide data about a {@link\n * Layout#getSpan|value-specific span}.\n *\n * **NOTE** This is an abstract base class; you can create instances\n * if it amuses you, but they won't support {@link\n * ExternalLayout#isCount|isCount} or other {@link Layout} functions.\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @abstract\n * @augments {Layout}\n */\nclass ExternalLayout extends Layout {\n /**\n * Return `true` iff the external layout decodes to an unsigned\n * integer layout.\n *\n * In that case it can be used as the source of {@link\n * Sequence#count|Sequence counts}, {@link Blob#length|Blob lengths},\n * or as {@link UnionLayoutDiscriminator#layout|external union\n * discriminators}.\n *\n * @abstract\n */\n isCount() {\n throw new Error('ExternalLayout is abstract');\n }\n}\nexports.ExternalLayout = ExternalLayout;\n/**\n * An {@link ExternalLayout} that determines its {@link\n * Layout#decode|value} based on offset into and length of the buffer\n * on which it is invoked.\n *\n * *Factory*: {@link module:Layout.greedy|greedy}\n *\n * @param {Number} [elementSpan] - initializer for {@link\n * GreedyCount#elementSpan|elementSpan}.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {ExternalLayout}\n */\nclass GreedyCount extends ExternalLayout {\n constructor(elementSpan = 1, property) {\n if ((!Number.isInteger(elementSpan)) || (0 >= elementSpan)) {\n throw new TypeError('elementSpan must be a (positive) integer');\n }\n super(-1, property);\n /** The layout for individual elements of the sequence. The value\n * must be a positive integer. If not provided, the value will be\n * 1. */\n this.elementSpan = elementSpan;\n }\n /** @override */\n isCount() {\n return true;\n }\n /** @override */\n decode(b, offset = 0) {\n checkUint8Array(b);\n const rem = b.length - offset;\n return Math.floor(rem / this.elementSpan);\n }\n /** @override */\n encode(src, b, offset) {\n return 0;\n }\n}\nexports.GreedyCount = GreedyCount;\n/**\n * An {@link ExternalLayout} that supports accessing a {@link Layout}\n * at a fixed offset from the start of another Layout. The offset may\n * be before, within, or after the base layout.\n *\n * *Factory*: {@link module:Layout.offset|offset}\n *\n * @param {Layout} layout - initializer for {@link\n * OffsetLayout#layout|layout}, modulo `property`.\n *\n * @param {Number} [offset] - Initializes {@link\n * OffsetLayout#offset|offset}. Defaults to zero.\n *\n * @param {string} [property] - Optional new property name for a\n * {@link Layout#replicate| replica} of `layout` to be used as {@link\n * OffsetLayout#layout|layout}. If not provided the `layout` is used\n * unchanged.\n *\n * @augments {Layout}\n */\nclass OffsetLayout extends ExternalLayout {\n constructor(layout, offset = 0, property) {\n if (!(layout instanceof Layout)) {\n throw new TypeError('layout must be a Layout');\n }\n if (!Number.isInteger(offset)) {\n throw new TypeError('offset must be integer or undefined');\n }\n super(layout.span, property || layout.property);\n /** The subordinated layout. */\n this.layout = layout;\n /** The location of {@link OffsetLayout#layout} relative to the\n * start of another layout.\n *\n * The value may be positive or negative, but an error will thrown\n * if at the point of use it goes outside the span of the Uint8Array\n * being accessed. */\n this.offset = offset;\n }\n /** @override */\n isCount() {\n return ((this.layout instanceof UInt)\n || (this.layout instanceof UIntBE));\n }\n /** @override */\n decode(b, offset = 0) {\n return this.layout.decode(b, offset + this.offset);\n }\n /** @override */\n encode(src, b, offset = 0) {\n return this.layout.encode(src, b, offset + this.offset);\n }\n}\nexports.OffsetLayout = OffsetLayout;\n/**\n * Represent an unsigned integer in little-endian format.\n *\n * *Factory*: {@link module:Layout.u8|u8}, {@link\n * module:Layout.u16|u16}, {@link module:Layout.u24|u24}, {@link\n * module:Layout.u32|u32}, {@link module:Layout.u40|u40}, {@link\n * module:Layout.u48|u48}\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass UInt extends Layout {\n constructor(span, property) {\n super(span, property);\n if (6 < this.span) {\n throw new RangeError('span must not exceed 6 bytes');\n }\n }\n /** @override */\n decode(b, offset = 0) {\n return uint8ArrayToBuffer(b).readUIntLE(offset, this.span);\n }\n /** @override */\n encode(src, b, offset = 0) {\n uint8ArrayToBuffer(b).writeUIntLE(src, offset, this.span);\n return this.span;\n }\n}\nexports.UInt = UInt;\n/**\n * Represent an unsigned integer in big-endian format.\n *\n * *Factory*: {@link module:Layout.u8be|u8be}, {@link\n * module:Layout.u16be|u16be}, {@link module:Layout.u24be|u24be},\n * {@link module:Layout.u32be|u32be}, {@link\n * module:Layout.u40be|u40be}, {@link module:Layout.u48be|u48be}\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass UIntBE extends Layout {\n constructor(span, property) {\n super(span, property);\n if (6 < this.span) {\n throw new RangeError('span must not exceed 6 bytes');\n }\n }\n /** @override */\n decode(b, offset = 0) {\n return uint8ArrayToBuffer(b).readUIntBE(offset, this.span);\n }\n /** @override */\n encode(src, b, offset = 0) {\n uint8ArrayToBuffer(b).writeUIntBE(src, offset, this.span);\n return this.span;\n }\n}\nexports.UIntBE = UIntBE;\n/**\n * Represent a signed integer in little-endian format.\n *\n * *Factory*: {@link module:Layout.s8|s8}, {@link\n * module:Layout.s16|s16}, {@link module:Layout.s24|s24}, {@link\n * module:Layout.s32|s32}, {@link module:Layout.s40|s40}, {@link\n * module:Layout.s48|s48}\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Int extends Layout {\n constructor(span, property) {\n super(span, property);\n if (6 < this.span) {\n throw new RangeError('span must not exceed 6 bytes');\n }\n }\n /** @override */\n decode(b, offset = 0) {\n return uint8ArrayToBuffer(b).readIntLE(offset, this.span);\n }\n /** @override */\n encode(src, b, offset = 0) {\n uint8ArrayToBuffer(b).writeIntLE(src, offset, this.span);\n return this.span;\n }\n}\nexports.Int = Int;\n/**\n * Represent a signed integer in big-endian format.\n *\n * *Factory*: {@link module:Layout.s8be|s8be}, {@link\n * module:Layout.s16be|s16be}, {@link module:Layout.s24be|s24be},\n * {@link module:Layout.s32be|s32be}, {@link\n * module:Layout.s40be|s40be}, {@link module:Layout.s48be|s48be}\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass IntBE extends Layout {\n constructor(span, property) {\n super(span, property);\n if (6 < this.span) {\n throw new RangeError('span must not exceed 6 bytes');\n }\n }\n /** @override */\n decode(b, offset = 0) {\n return uint8ArrayToBuffer(b).readIntBE(offset, this.span);\n }\n /** @override */\n encode(src, b, offset = 0) {\n uint8ArrayToBuffer(b).writeIntBE(src, offset, this.span);\n return this.span;\n }\n}\nexports.IntBE = IntBE;\nconst V2E32 = Math.pow(2, 32);\n/* True modulus high and low 32-bit words, where low word is always\n * non-negative. */\nfunction divmodInt64(src) {\n const hi32 = Math.floor(src / V2E32);\n const lo32 = src - (hi32 * V2E32);\n return { hi32, lo32 };\n}\n/* Reconstruct Number from quotient and non-negative remainder */\nfunction roundedInt64(hi32, lo32) {\n return hi32 * V2E32 + lo32;\n}\n/**\n * Represent an unsigned 64-bit integer in little-endian format when\n * encoded and as a near integral JavaScript Number when decoded.\n *\n * *Factory*: {@link module:Layout.nu64|nu64}\n *\n * **NOTE** Values with magnitude greater than 2^52 may not decode to\n * the exact value of the encoded representation.\n *\n * @augments {Layout}\n */\nclass NearUInt64 extends Layout {\n constructor(property) {\n super(8, property);\n }\n /** @override */\n decode(b, offset = 0) {\n const buffer = uint8ArrayToBuffer(b);\n const lo32 = buffer.readUInt32LE(offset);\n const hi32 = buffer.readUInt32LE(offset + 4);\n return roundedInt64(hi32, lo32);\n }\n /** @override */\n encode(src, b, offset = 0) {\n const split = divmodInt64(src);\n const buffer = uint8ArrayToBuffer(b);\n buffer.writeUInt32LE(split.lo32, offset);\n buffer.writeUInt32LE(split.hi32, offset + 4);\n return 8;\n }\n}\nexports.NearUInt64 = NearUInt64;\n/**\n * Represent an unsigned 64-bit integer in big-endian format when\n * encoded and as a near integral JavaScript Number when decoded.\n *\n * *Factory*: {@link module:Layout.nu64be|nu64be}\n *\n * **NOTE** Values with magnitude greater than 2^52 may not decode to\n * the exact value of the encoded representation.\n *\n * @augments {Layout}\n */\nclass NearUInt64BE extends Layout {\n constructor(property) {\n super(8, property);\n }\n /** @override */\n decode(b, offset = 0) {\n const buffer = uint8ArrayToBuffer(b);\n const hi32 = buffer.readUInt32BE(offset);\n const lo32 = buffer.readUInt32BE(offset + 4);\n return roundedInt64(hi32, lo32);\n }\n /** @override */\n encode(src, b, offset = 0) {\n const split = divmodInt64(src);\n const buffer = uint8ArrayToBuffer(b);\n buffer.writeUInt32BE(split.hi32, offset);\n buffer.writeUInt32BE(split.lo32, offset + 4);\n return 8;\n }\n}\nexports.NearUInt64BE = NearUInt64BE;\n/**\n * Represent a signed 64-bit integer in little-endian format when\n * encoded and as a near integral JavaScript Number when decoded.\n *\n * *Factory*: {@link module:Layout.ns64|ns64}\n *\n * **NOTE** Values with magnitude greater than 2^52 may not decode to\n * the exact value of the encoded representation.\n *\n * @augments {Layout}\n */\nclass NearInt64 extends Layout {\n constructor(property) {\n super(8, property);\n }\n /** @override */\n decode(b, offset = 0) {\n const buffer = uint8ArrayToBuffer(b);\n const lo32 = buffer.readUInt32LE(offset);\n const hi32 = buffer.readInt32LE(offset + 4);\n return roundedInt64(hi32, lo32);\n }\n /** @override */\n encode(src, b, offset = 0) {\n const split = divmodInt64(src);\n const buffer = uint8ArrayToBuffer(b);\n buffer.writeUInt32LE(split.lo32, offset);\n buffer.writeInt32LE(split.hi32, offset + 4);\n return 8;\n }\n}\nexports.NearInt64 = NearInt64;\n/**\n * Represent a signed 64-bit integer in big-endian format when\n * encoded and as a near integral JavaScript Number when decoded.\n *\n * *Factory*: {@link module:Layout.ns64be|ns64be}\n *\n * **NOTE** Values with magnitude greater than 2^52 may not decode to\n * the exact value of the encoded representation.\n *\n * @augments {Layout}\n */\nclass NearInt64BE extends Layout {\n constructor(property) {\n super(8, property);\n }\n /** @override */\n decode(b, offset = 0) {\n const buffer = uint8ArrayToBuffer(b);\n const hi32 = buffer.readInt32BE(offset);\n const lo32 = buffer.readUInt32BE(offset + 4);\n return roundedInt64(hi32, lo32);\n }\n /** @override */\n encode(src, b, offset = 0) {\n const split = divmodInt64(src);\n const buffer = uint8ArrayToBuffer(b);\n buffer.writeInt32BE(split.hi32, offset);\n buffer.writeUInt32BE(split.lo32, offset + 4);\n return 8;\n }\n}\nexports.NearInt64BE = NearInt64BE;\n/**\n * Represent a 32-bit floating point number in little-endian format.\n *\n * *Factory*: {@link module:Layout.f32|f32}\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Float extends Layout {\n constructor(property) {\n super(4, property);\n }\n /** @override */\n decode(b, offset = 0) {\n return uint8ArrayToBuffer(b).readFloatLE(offset);\n }\n /** @override */\n encode(src, b, offset = 0) {\n uint8ArrayToBuffer(b).writeFloatLE(src, offset);\n return 4;\n }\n}\nexports.Float = Float;\n/**\n * Represent a 32-bit floating point number in big-endian format.\n *\n * *Factory*: {@link module:Layout.f32be|f32be}\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass FloatBE extends Layout {\n constructor(property) {\n super(4, property);\n }\n /** @override */\n decode(b, offset = 0) {\n return uint8ArrayToBuffer(b).readFloatBE(offset);\n }\n /** @override */\n encode(src, b, offset = 0) {\n uint8ArrayToBuffer(b).writeFloatBE(src, offset);\n return 4;\n }\n}\nexports.FloatBE = FloatBE;\n/**\n * Represent a 64-bit floating point number in little-endian format.\n *\n * *Factory*: {@link module:Layout.f64|f64}\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Double extends Layout {\n constructor(property) {\n super(8, property);\n }\n /** @override */\n decode(b, offset = 0) {\n return uint8ArrayToBuffer(b).readDoubleLE(offset);\n }\n /** @override */\n encode(src, b, offset = 0) {\n uint8ArrayToBuffer(b).writeDoubleLE(src, offset);\n return 8;\n }\n}\nexports.Double = Double;\n/**\n * Represent a 64-bit floating point number in big-endian format.\n *\n * *Factory*: {@link module:Layout.f64be|f64be}\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass DoubleBE extends Layout {\n constructor(property) {\n super(8, property);\n }\n /** @override */\n decode(b, offset = 0) {\n return uint8ArrayToBuffer(b).readDoubleBE(offset);\n }\n /** @override */\n encode(src, b, offset = 0) {\n uint8ArrayToBuffer(b).writeDoubleBE(src, offset);\n return 8;\n }\n}\nexports.DoubleBE = DoubleBE;\n/**\n * Represent a contiguous sequence of a specific layout as an Array.\n *\n * *Factory*: {@link module:Layout.seq|seq}\n *\n * @param {Layout} elementLayout - initializer for {@link\n * Sequence#elementLayout|elementLayout}.\n *\n * @param {(Number|ExternalLayout)} count - initializer for {@link\n * Sequence#count|count}. The parameter must be either a positive\n * integer or an instance of {@link ExternalLayout}.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Sequence extends Layout {\n constructor(elementLayout, count, property) {\n if (!(elementLayout instanceof Layout)) {\n throw new TypeError('elementLayout must be a Layout');\n }\n if (!(((count instanceof ExternalLayout) && count.isCount())\n || (Number.isInteger(count) && (0 <= count)))) {\n throw new TypeError('count must be non-negative integer '\n + 'or an unsigned integer ExternalLayout');\n }\n let span = -1;\n if ((!(count instanceof ExternalLayout))\n && (0 < elementLayout.span)) {\n span = count * elementLayout.span;\n }\n super(span, property);\n /** The layout for individual elements of the sequence. */\n this.elementLayout = elementLayout;\n /** The number of elements in the sequence.\n *\n * This will be either a non-negative integer or an instance of\n * {@link ExternalLayout} for which {@link\n * ExternalLayout#isCount|isCount()} is `true`. */\n this.count = count;\n }\n /** @override */\n getSpan(b, offset = 0) {\n if (0 <= this.span) {\n return this.span;\n }\n let span = 0;\n let count = this.count;\n if (count instanceof ExternalLayout) {\n count = count.decode(b, offset);\n }\n if (0 < this.elementLayout.span) {\n span = count * this.elementLayout.span;\n }\n else {\n let idx = 0;\n while (idx < count) {\n span += this.elementLayout.getSpan(b, offset + span);\n ++idx;\n }\n }\n return span;\n }\n /** @override */\n decode(b, offset = 0) {\n const rv = [];\n let i = 0;\n let count = this.count;\n if (count instanceof ExternalLayout) {\n count = count.decode(b, offset);\n }\n while (i < count) {\n rv.push(this.elementLayout.decode(b, offset));\n offset += this.elementLayout.getSpan(b, offset);\n i += 1;\n }\n return rv;\n }\n /** Implement {@link Layout#encode|encode} for {@link Sequence}.\n *\n * **NOTE** If `src` is shorter than {@link Sequence#count|count} then\n * the unused space in the buffer is left unchanged. If `src` is\n * longer than {@link Sequence#count|count} the unneeded elements are\n * ignored.\n *\n * **NOTE** If {@link Layout#count|count} is an instance of {@link\n * ExternalLayout} then the length of `src` will be encoded as the\n * count after `src` is encoded. */\n encode(src, b, offset = 0) {\n const elo = this.elementLayout;\n const span = src.reduce((span, v) => {\n return span + elo.encode(v, b, offset + span);\n }, 0);\n if (this.count instanceof ExternalLayout) {\n this.count.encode(src.length, b, offset);\n }\n return span;\n }\n}\nexports.Sequence = Sequence;\n/**\n * Represent a contiguous sequence of arbitrary layout elements as an\n * Object.\n *\n * *Factory*: {@link module:Layout.struct|struct}\n *\n * **NOTE** The {@link Layout#span|span} of the structure is variable\n * if any layout in {@link Structure#fields|fields} has a variable\n * span. When {@link Layout#encode|encoding} we must have a value for\n * all variable-length fields, or we wouldn't be able to figure out\n * how much space to use for storage. We can only identify the value\n * for a field when it has a {@link Layout#property|property}. As\n * such, although a structure may contain both unnamed fields and\n * variable-length fields, it cannot contain an unnamed\n * variable-length field.\n *\n * @param {Layout[]} fields - initializer for {@link\n * Structure#fields|fields}. An error is raised if this contains a\n * variable-length field for which a {@link Layout#property|property}\n * is not defined.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @param {Boolean} [decodePrefixes] - initializer for {@link\n * Structure#decodePrefixes|property}.\n *\n * @throws {Error} - if `fields` contains an unnamed variable-length\n * layout.\n *\n * @augments {Layout}\n */\nclass Structure extends Layout {\n constructor(fields, property, decodePrefixes) {\n if (!(Array.isArray(fields)\n && fields.reduce((acc, v) => acc && (v instanceof Layout), true))) {\n throw new TypeError('fields must be array of Layout instances');\n }\n if (('boolean' === typeof property)\n && (undefined === decodePrefixes)) {\n decodePrefixes = property;\n property = undefined;\n }\n /* Verify absence of unnamed variable-length fields. */\n for (const fd of fields) {\n if ((0 > fd.span)\n && (undefined === fd.property)) {\n throw new Error('fields cannot contain unnamed variable-length layout');\n }\n }\n let span = -1;\n try {\n span = fields.reduce((span, fd) => span + fd.getSpan(), 0);\n }\n catch (e) {\n // ignore error\n }\n super(span, property);\n /** The sequence of {@link Layout} values that comprise the\n * structure.\n *\n * The individual elements need not be the same type, and may be\n * either scalar or aggregate layouts. If a member layout leaves\n * its {@link Layout#property|property} undefined the\n * corresponding region of the buffer associated with the element\n * will not be mutated.\n *\n * @type {Layout[]} */\n this.fields = fields;\n /** Control behavior of {@link Layout#decode|decode()} given short\n * buffers.\n *\n * In some situations a structure many be extended with additional\n * fields over time, with older installations providing only a\n * prefix of the full structure. If this property is `true`\n * decoding will accept those buffers and leave subsequent fields\n * undefined, as long as the buffer ends at a field boundary.\n * Defaults to `false`. */\n this.decodePrefixes = !!decodePrefixes;\n }\n /** @override */\n getSpan(b, offset = 0) {\n if (0 <= this.span) {\n return this.span;\n }\n let span = 0;\n try {\n span = this.fields.reduce((span, fd) => {\n const fsp = fd.getSpan(b, offset);\n offset += fsp;\n return span + fsp;\n }, 0);\n }\n catch (e) {\n throw new RangeError('indeterminate span');\n }\n return span;\n }\n /** @override */\n decode(b, offset = 0) {\n checkUint8Array(b);\n const dest = this.makeDestinationObject();\n for (const fd of this.fields) {\n if (undefined !== fd.property) {\n dest[fd.property] = fd.decode(b, offset);\n }\n offset += fd.getSpan(b, offset);\n if (this.decodePrefixes\n && (b.length === offset)) {\n break;\n }\n }\n return dest;\n }\n /** Implement {@link Layout#encode|encode} for {@link Structure}.\n *\n * If `src` is missing a property for a member with a defined {@link\n * Layout#property|property} the corresponding region of the buffer is\n * left unmodified. */\n encode(src, b, offset = 0) {\n const firstOffset = offset;\n let lastOffset = 0;\n let lastWrote = 0;\n for (const fd of this.fields) {\n let span = fd.span;\n lastWrote = (0 < span) ? span : 0;\n if (undefined !== fd.property) {\n const fv = src[fd.property];\n if (undefined !== fv) {\n lastWrote = fd.encode(fv, b, offset);\n if (0 > span) {\n /* Read the as-encoded span, which is not necessarily the\n * same as what we wrote. */\n span = fd.getSpan(b, offset);\n }\n }\n }\n lastOffset = offset;\n offset += span;\n }\n /* Use (lastOffset + lastWrote) instead of offset because the last\n * item may have had a dynamic length and we don't want to include\n * the padding between it and the end of the space reserved for\n * it. */\n return (lastOffset + lastWrote) - firstOffset;\n }\n /** @override */\n fromArray(values) {\n const dest = this.makeDestinationObject();\n for (const fd of this.fields) {\n if ((undefined !== fd.property)\n && (0 < values.length)) {\n dest[fd.property] = values.shift();\n }\n }\n return dest;\n }\n /**\n * Get access to the layout of a given property.\n *\n * @param {String} property - the structure member of interest.\n *\n * @return {Layout} - the layout associated with `property`, or\n * undefined if there is no such property.\n */\n layoutFor(property) {\n if ('string' !== typeof property) {\n throw new TypeError('property must be string');\n }\n for (const fd of this.fields) {\n if (fd.property === property) {\n return fd;\n }\n }\n return undefined;\n }\n /**\n * Get the offset of a structure member.\n *\n * @param {String} property - the structure member of interest.\n *\n * @return {Number} - the offset in bytes to the start of `property`\n * within the structure, or undefined if `property` is not a field\n * within the structure. If the property is a member but follows a\n * variable-length structure member a negative number will be\n * returned.\n */\n offsetOf(property) {\n if ('string' !== typeof property) {\n throw new TypeError('property must be string');\n }\n let offset = 0;\n for (const fd of this.fields) {\n if (fd.property === property) {\n return offset;\n }\n if (0 > fd.span) {\n offset = -1;\n }\n else if (0 <= offset) {\n offset += fd.span;\n }\n }\n return undefined;\n }\n}\nexports.Structure = Structure;\n/**\n * An object that can provide a {@link\n * Union#discriminator|discriminator} API for {@link Union}.\n *\n * **NOTE** This is an abstract base class; you can create instances\n * if it amuses you, but they won't support the {@link\n * UnionDiscriminator#encode|encode} or {@link\n * UnionDiscriminator#decode|decode} functions.\n *\n * @param {string} [property] - Default for {@link\n * UnionDiscriminator#property|property}.\n *\n * @abstract\n */\nclass UnionDiscriminator {\n constructor(property) {\n /** The {@link Layout#property|property} to be used when the\n * discriminator is referenced in isolation (generally when {@link\n * Union#decode|Union decode} cannot delegate to a specific\n * variant). */\n this.property = property;\n }\n /** Analog to {@link Layout#decode|Layout decode} for union discriminators.\n *\n * The implementation of this method need not reference the buffer if\n * variant information is available through other means. */\n decode(b, offset) {\n throw new Error('UnionDiscriminator is abstract');\n }\n /** Analog to {@link Layout#decode|Layout encode} for union discriminators.\n *\n * The implementation of this method need not store the value if\n * variant information is maintained through other means. */\n encode(src, b, offset) {\n throw new Error('UnionDiscriminator is abstract');\n }\n}\nexports.UnionDiscriminator = UnionDiscriminator;\n/**\n * An object that can provide a {@link\n * UnionDiscriminator|discriminator API} for {@link Union} using an\n * unsigned integral {@link Layout} instance located either inside or\n * outside the union.\n *\n * @param {ExternalLayout} layout - initializes {@link\n * UnionLayoutDiscriminator#layout|layout}. Must satisfy {@link\n * ExternalLayout#isCount|isCount()}.\n *\n * @param {string} [property] - Default for {@link\n * UnionDiscriminator#property|property}, superseding the property\n * from `layout`, but defaulting to `variant` if neither `property`\n * nor layout provide a property name.\n *\n * @augments {UnionDiscriminator}\n */\nclass UnionLayoutDiscriminator extends UnionDiscriminator {\n constructor(layout, property) {\n if (!((layout instanceof ExternalLayout)\n && layout.isCount())) {\n throw new TypeError('layout must be an unsigned integer ExternalLayout');\n }\n super(property || layout.property || 'variant');\n /** The {@link ExternalLayout} used to access the discriminator\n * value. */\n this.layout = layout;\n }\n /** Delegate decoding to {@link UnionLayoutDiscriminator#layout|layout}. */\n decode(b, offset) {\n return this.layout.decode(b, offset);\n }\n /** Delegate encoding to {@link UnionLayoutDiscriminator#layout|layout}. */\n encode(src, b, offset) {\n return this.layout.encode(src, b, offset);\n }\n}\nexports.UnionLayoutDiscriminator = UnionLayoutDiscriminator;\n/**\n * Represent any number of span-compatible layouts.\n *\n * *Factory*: {@link module:Layout.union|union}\n *\n * If the union has a {@link Union#defaultLayout|default layout} that\n * layout must have a non-negative {@link Layout#span|span}. The span\n * of a fixed-span union includes its {@link\n * Union#discriminator|discriminator} if the variant is a {@link\n * Union#usesPrefixDiscriminator|prefix of the union}, plus the span\n * of its {@link Union#defaultLayout|default layout}.\n *\n * If the union does not have a default layout then the encoded span\n * of the union depends on the encoded span of its variant (which may\n * be fixed or variable).\n *\n * {@link VariantLayout#layout|Variant layout}s are added through\n * {@link Union#addVariant|addVariant}. If the union has a default\n * layout, the span of the {@link VariantLayout#layout|layout\n * contained by the variant} must not exceed the span of the {@link\n * Union#defaultLayout|default layout} (minus the span of a {@link\n * Union#usesPrefixDiscriminator|prefix disriminator}, if used). The\n * span of the variant will equal the span of the union itself.\n *\n * The variant for a buffer can only be identified from the {@link\n * Union#discriminator|discriminator} {@link\n * UnionDiscriminator#property|property} (in the case of the {@link\n * Union#defaultLayout|default layout}), or by using {@link\n * Union#getVariant|getVariant} and examining the resulting {@link\n * VariantLayout} instance.\n *\n * A variant compatible with a JavaScript object can be identified\n * using {@link Union#getSourceVariant|getSourceVariant}.\n *\n * @param {(UnionDiscriminator|ExternalLayout|Layout)} discr - How to\n * identify the layout used to interpret the union contents. The\n * parameter must be an instance of {@link UnionDiscriminator}, an\n * {@link ExternalLayout} that satisfies {@link\n * ExternalLayout#isCount|isCount()}, or {@link UInt} (or {@link\n * UIntBE}). When a non-external layout element is passed the layout\n * appears at the start of the union. In all cases the (synthesized)\n * {@link UnionDiscriminator} instance is recorded as {@link\n * Union#discriminator|discriminator}.\n *\n * @param {(Layout|null)} defaultLayout - initializer for {@link\n * Union#defaultLayout|defaultLayout}. If absent defaults to `null`.\n * If `null` there is no default layout: the union has data-dependent\n * length and attempts to decode or encode unrecognized variants will\n * throw an exception. A {@link Layout} instance must have a\n * non-negative {@link Layout#span|span}, and if it lacks a {@link\n * Layout#property|property} the {@link\n * Union#defaultLayout|defaultLayout} will be a {@link\n * Layout#replicate|replica} with property `content`.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Union extends Layout {\n constructor(discr, defaultLayout, property) {\n let discriminator;\n if ((discr instanceof UInt)\n || (discr instanceof UIntBE)) {\n discriminator = new UnionLayoutDiscriminator(new OffsetLayout(discr));\n }\n else if ((discr instanceof ExternalLayout)\n && discr.isCount()) {\n discriminator = new UnionLayoutDiscriminator(discr);\n }\n else if (!(discr instanceof UnionDiscriminator)) {\n throw new TypeError('discr must be a UnionDiscriminator '\n + 'or an unsigned integer layout');\n }\n else {\n discriminator = discr;\n }\n if (undefined === defaultLayout) {\n defaultLayout = null;\n }\n if (!((null === defaultLayout)\n || (defaultLayout instanceof Layout))) {\n throw new TypeError('defaultLayout must be null or a Layout');\n }\n if (null !== defaultLayout) {\n if (0 > defaultLayout.span) {\n throw new Error('defaultLayout must have constant span');\n }\n if (undefined === defaultLayout.property) {\n defaultLayout = defaultLayout.replicate('content');\n }\n }\n /* The union span can be estimated only if there's a default\n * layout. The union spans its default layout, plus any prefix\n * variant layout. By construction both layouts, if present, have\n * non-negative span. */\n let span = -1;\n if (defaultLayout) {\n span = defaultLayout.span;\n if ((0 <= span) && ((discr instanceof UInt)\n || (discr instanceof UIntBE))) {\n span += discriminator.layout.span;\n }\n }\n super(span, property);\n /** The interface for the discriminator value in isolation.\n *\n * This a {@link UnionDiscriminator} either passed to the\n * constructor or synthesized from the `discr` constructor\n * argument. {@link\n * Union#usesPrefixDiscriminator|usesPrefixDiscriminator} will be\n * `true` iff the `discr` parameter was a non-offset {@link\n * Layout} instance. */\n this.discriminator = discriminator;\n /** `true` if the {@link Union#discriminator|discriminator} is the\n * first field in the union.\n *\n * If `false` the discriminator is obtained from somewhere\n * else. */\n this.usesPrefixDiscriminator = (discr instanceof UInt)\n || (discr instanceof UIntBE);\n /** The layout for non-discriminator content when the value of the\n * discriminator is not recognized.\n *\n * This is the value passed to the constructor. It is\n * structurally equivalent to the second component of {@link\n * Union#layout|layout} but may have a different property\n * name. */\n this.defaultLayout = defaultLayout;\n /** A registry of allowed variants.\n *\n * The keys are unsigned integers which should be compatible with\n * {@link Union.discriminator|discriminator}. The property value\n * is the corresponding {@link VariantLayout} instances assigned\n * to this union by {@link Union#addVariant|addVariant}.\n *\n * **NOTE** The registry remains mutable so that variants can be\n * {@link Union#addVariant|added} at any time. Users should not\n * manipulate the content of this property. */\n this.registry = {};\n /* Private variable used when invoking getSourceVariant */\n let boundGetSourceVariant = this.defaultGetSourceVariant.bind(this);\n /** Function to infer the variant selected by a source object.\n *\n * Defaults to {@link\n * Union#defaultGetSourceVariant|defaultGetSourceVariant} but may\n * be overridden using {@link\n * Union#configGetSourceVariant|configGetSourceVariant}.\n *\n * @param {Object} src - as with {@link\n * Union#defaultGetSourceVariant|defaultGetSourceVariant}.\n *\n * @returns {(undefined|VariantLayout)} The default variant\n * (`undefined`) or first registered variant that uses a property\n * available in `src`. */\n this.getSourceVariant = function (src) {\n return boundGetSourceVariant(src);\n };\n /** Function to override the implementation of {@link\n * Union#getSourceVariant|getSourceVariant}.\n *\n * Use this if the desired variant cannot be identified using the\n * algorithm of {@link\n * Union#defaultGetSourceVariant|defaultGetSourceVariant}.\n *\n * **NOTE** The provided function will be invoked bound to this\n * Union instance, providing local access to {@link\n * Union#registry|registry}.\n *\n * @param {Function} gsv - a function that follows the API of\n * {@link Union#defaultGetSourceVariant|defaultGetSourceVariant}. */\n this.configGetSourceVariant = function (gsv) {\n boundGetSourceVariant = gsv.bind(this);\n };\n }\n /** @override */\n getSpan(b, offset = 0) {\n if (0 <= this.span) {\n return this.span;\n }\n /* Default layouts always have non-negative span, so we don't have\n * one and we have to recognize the variant which will in turn\n * determine the span. */\n const vlo = this.getVariant(b, offset);\n if (!vlo) {\n throw new Error('unable to determine span for unrecognized variant');\n }\n return vlo.getSpan(b, offset);\n }\n /**\n * Method to infer a registered Union variant compatible with `src`.\n *\n * The first satisfied rule in the following sequence defines the\n * return value:\n * * If `src` has properties matching the Union discriminator and\n * the default layout, `undefined` is returned regardless of the\n * value of the discriminator property (this ensures the default\n * layout will be used);\n * * If `src` has a property matching the Union discriminator, the\n * value of the discriminator identifies a registered variant, and\n * either (a) the variant has no layout, or (b) `src` has the\n * variant's property, then the variant is returned (because the\n * source satisfies the constraints of the variant it identifies);\n * * If `src` does not have a property matching the Union\n * discriminator, but does have a property matching a registered\n * variant, then the variant is returned (because the source\n * matches a variant without an explicit conflict);\n * * An error is thrown (because we either can't identify a variant,\n * or we were explicitly told the variant but can't satisfy it).\n *\n * @param {Object} src - an object presumed to be compatible with\n * the content of the Union.\n *\n * @return {(undefined|VariantLayout)} - as described above.\n *\n * @throws {Error} - if `src` cannot be associated with a default or\n * registered variant.\n */\n defaultGetSourceVariant(src) {\n if (Object.prototype.hasOwnProperty.call(src, this.discriminator.property)) {\n if (this.defaultLayout && this.defaultLayout.property\n && Object.prototype.hasOwnProperty.call(src, this.defaultLayout.property)) {\n return undefined;\n }\n const vlo = this.registry[src[this.discriminator.property]];\n if (vlo\n && ((!vlo.layout)\n || (vlo.property && Object.prototype.hasOwnProperty.call(src, vlo.property)))) {\n return vlo;\n }\n }\n else {\n for (const tag in this.registry) {\n const vlo = this.registry[tag];\n if (vlo.property && Object.prototype.hasOwnProperty.call(src, vlo.property)) {\n return vlo;\n }\n }\n }\n throw new Error('unable to infer src variant');\n }\n /** Implement {@link Layout#decode|decode} for {@link Union}.\n *\n * If the variant is {@link Union#addVariant|registered} the return\n * value is an instance of that variant, with no explicit\n * discriminator. Otherwise the {@link Union#defaultLayout|default\n * layout} is used to decode the content. */\n decode(b, offset = 0) {\n let dest;\n const dlo = this.discriminator;\n const discr = dlo.decode(b, offset);\n const clo = this.registry[discr];\n if (undefined === clo) {\n const defaultLayout = this.defaultLayout;\n let contentOffset = 0;\n if (this.usesPrefixDiscriminator) {\n contentOffset = dlo.layout.span;\n }\n dest = this.makeDestinationObject();\n dest[dlo.property] = discr;\n // defaultLayout.property can be undefined, but this is allowed by buffer-layout\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n dest[defaultLayout.property] = defaultLayout.decode(b, offset + contentOffset);\n }\n else {\n dest = clo.decode(b, offset);\n }\n return dest;\n }\n /** Implement {@link Layout#encode|encode} for {@link Union}.\n *\n * This API assumes the `src` object is consistent with the union's\n * {@link Union#defaultLayout|default layout}. To encode variants\n * use the appropriate variant-specific {@link VariantLayout#encode}\n * method. */\n encode(src, b, offset = 0) {\n const vlo = this.getSourceVariant(src);\n if (undefined === vlo) {\n const dlo = this.discriminator;\n // this.defaultLayout is not undefined when vlo is undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const clo = this.defaultLayout;\n let contentOffset = 0;\n if (this.usesPrefixDiscriminator) {\n contentOffset = dlo.layout.span;\n }\n dlo.encode(src[dlo.property], b, offset);\n // clo.property is not undefined when vlo is undefined\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return contentOffset + clo.encode(src[clo.property], b, offset + contentOffset);\n }\n return vlo.encode(src, b, offset);\n }\n /** Register a new variant structure within a union. The newly\n * created variant is returned.\n *\n * @param {Number} variant - initializer for {@link\n * VariantLayout#variant|variant}.\n *\n * @param {Layout} layout - initializer for {@link\n * VariantLayout#layout|layout}.\n *\n * @param {String} property - initializer for {@link\n * Layout#property|property}.\n *\n * @return {VariantLayout} */\n addVariant(variant, layout, property) {\n const rv = new VariantLayout(this, variant, layout, property);\n this.registry[variant] = rv;\n return rv;\n }\n /**\n * Get the layout associated with a registered variant.\n *\n * If `vb` does not produce a registered variant the function returns\n * `undefined`.\n *\n * @param {(Number|Uint8Array)} vb - either the variant number, or a\n * buffer from which the discriminator is to be read.\n *\n * @param {Number} offset - offset into `vb` for the start of the\n * union. Used only when `vb` is an instance of {Uint8Array}.\n *\n * @return {({VariantLayout}|undefined)}\n */\n getVariant(vb, offset = 0) {\n let variant;\n if (vb instanceof Uint8Array) {\n variant = this.discriminator.decode(vb, offset);\n }\n else {\n variant = vb;\n }\n return this.registry[variant];\n }\n}\nexports.Union = Union;\n/**\n * Represent a specific variant within a containing union.\n *\n * **NOTE** The {@link Layout#span|span} of the variant may include\n * the span of the {@link Union#discriminator|discriminator} used to\n * identify it, but values read and written using the variant strictly\n * conform to the content of {@link VariantLayout#layout|layout}.\n *\n * **NOTE** User code should not invoke this constructor directly. Use\n * the union {@link Union#addVariant|addVariant} helper method.\n *\n * @param {Union} union - initializer for {@link\n * VariantLayout#union|union}.\n *\n * @param {Number} variant - initializer for {@link\n * VariantLayout#variant|variant}.\n *\n * @param {Layout} [layout] - initializer for {@link\n * VariantLayout#layout|layout}. If absent the variant carries no\n * data.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}. Unlike many other layouts, variant\n * layouts normally include a property name so they can be identified\n * within their containing {@link Union}. The property identifier may\n * be absent only if `layout` is is absent.\n *\n * @augments {Layout}\n */\nclass VariantLayout extends Layout {\n constructor(union, variant, layout, property) {\n if (!(union instanceof Union)) {\n throw new TypeError('union must be a Union');\n }\n if ((!Number.isInteger(variant)) || (0 > variant)) {\n throw new TypeError('variant must be a (non-negative) integer');\n }\n if (('string' === typeof layout)\n && (undefined === property)) {\n property = layout;\n layout = null;\n }\n if (layout) {\n if (!(layout instanceof Layout)) {\n throw new TypeError('layout must be a Layout');\n }\n if ((null !== union.defaultLayout)\n && (0 <= layout.span)\n && (layout.span > union.defaultLayout.span)) {\n throw new Error('variant span exceeds span of containing union');\n }\n if ('string' !== typeof property) {\n throw new TypeError('variant must have a String property');\n }\n }\n let span = union.span;\n if (0 > union.span) {\n span = layout ? layout.span : 0;\n if ((0 <= span) && union.usesPrefixDiscriminator) {\n span += union.discriminator.layout.span;\n }\n }\n super(span, property);\n /** The {@link Union} to which this variant belongs. */\n this.union = union;\n /** The unsigned integral value identifying this variant within\n * the {@link Union#discriminator|discriminator} of the containing\n * union. */\n this.variant = variant;\n /** The {@link Layout} to be used when reading/writing the\n * non-discriminator part of the {@link\n * VariantLayout#union|union}. If `null` the variant carries no\n * data. */\n this.layout = layout || null;\n }\n /** @override */\n getSpan(b, offset = 0) {\n if (0 <= this.span) {\n /* Will be equal to the containing union span if that is not\n * variable. */\n return this.span;\n }\n let contentOffset = 0;\n if (this.union.usesPrefixDiscriminator) {\n contentOffset = this.union.discriminator.layout.span;\n }\n /* Span is defined solely by the variant (and prefix discriminator) */\n let span = 0;\n if (this.layout) {\n span = this.layout.getSpan(b, offset + contentOffset);\n }\n return contentOffset + span;\n }\n /** @override */\n decode(b, offset = 0) {\n const dest = this.makeDestinationObject();\n if (this !== this.union.getVariant(b, offset)) {\n throw new Error('variant mismatch');\n }\n let contentOffset = 0;\n if (this.union.usesPrefixDiscriminator) {\n contentOffset = this.union.discriminator.layout.span;\n }\n if (this.layout) {\n dest[this.property] = this.layout.decode(b, offset + contentOffset);\n }\n else if (this.property) {\n dest[this.property] = true;\n }\n else if (this.union.usesPrefixDiscriminator) {\n dest[this.union.discriminator.property] = this.variant;\n }\n return dest;\n }\n /** @override */\n encode(src, b, offset = 0) {\n let contentOffset = 0;\n if (this.union.usesPrefixDiscriminator) {\n contentOffset = this.union.discriminator.layout.span;\n }\n if (this.layout\n && (!Object.prototype.hasOwnProperty.call(src, this.property))) {\n throw new TypeError('variant lacks property ' + this.property);\n }\n this.union.discriminator.encode(this.variant, b, offset);\n let span = contentOffset;\n if (this.layout) {\n this.layout.encode(src[this.property], b, offset + contentOffset);\n span += this.layout.getSpan(b, offset + contentOffset);\n if ((0 <= this.union.span)\n && (span > this.union.span)) {\n throw new Error('encoded variant overruns containing union');\n }\n }\n return span;\n }\n /** Delegate {@link Layout#fromArray|fromArray} to {@link\n * VariantLayout#layout|layout}. */\n fromArray(values) {\n if (this.layout) {\n return this.layout.fromArray(values);\n }\n return undefined;\n }\n}\nexports.VariantLayout = VariantLayout;\n/** JavaScript chose to define bitwise operations as operating on\n * signed 32-bit values in 2's complement form, meaning any integer\n * with bit 31 set is going to look negative. For right shifts that's\n * not a problem, because `>>>` is a logical shift, but for every\n * other bitwise operator we have to compensate for possible negative\n * results. */\nfunction fixBitwiseResult(v) {\n if (0 > v) {\n v += 0x100000000;\n }\n return v;\n}\n/**\n * Contain a sequence of bit fields as an unsigned integer.\n *\n * *Factory*: {@link module:Layout.bits|bits}\n *\n * This is a container element; within it there are {@link BitField}\n * instances that provide the extracted properties. The container\n * simply defines the aggregate representation and its bit ordering.\n * The representation is an object containing properties with numeric\n * or {@link Boolean} values.\n *\n * {@link BitField}s are added with the {@link\n * BitStructure#addField|addField} and {@link\n * BitStructure#addBoolean|addBoolean} methods.\n\n * @param {Layout} word - initializer for {@link\n * BitStructure#word|word}. The parameter must be an instance of\n * {@link UInt} (or {@link UIntBE}) that is no more than 4 bytes wide.\n *\n * @param {bool} [msb] - `true` if the bit numbering starts at the\n * most significant bit of the containing word; `false` (default) if\n * it starts at the least significant bit of the containing word. If\n * the parameter at this position is a string and `property` is\n * `undefined` the value of this argument will instead be used as the\n * value of `property`.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass BitStructure extends Layout {\n constructor(word, msb, property) {\n if (!((word instanceof UInt)\n || (word instanceof UIntBE))) {\n throw new TypeError('word must be a UInt or UIntBE layout');\n }\n if (('string' === typeof msb)\n && (undefined === property)) {\n property = msb;\n msb = false;\n }\n if (4 < word.span) {\n throw new RangeError('word cannot exceed 32 bits');\n }\n super(word.span, property);\n /** The layout used for the packed value. {@link BitField}\n * instances are packed sequentially depending on {@link\n * BitStructure#msb|msb}. */\n this.word = word;\n /** Whether the bit sequences are packed starting at the most\n * significant bit growing down (`true`), or the least significant\n * bit growing up (`false`).\n *\n * **NOTE** Regardless of this value, the least significant bit of\n * any {@link BitField} value is the least significant bit of the\n * corresponding section of the packed value. */\n this.msb = !!msb;\n /** The sequence of {@link BitField} layouts that comprise the\n * packed structure.\n *\n * **NOTE** The array remains mutable to allow fields to be {@link\n * BitStructure#addField|added} after construction. Users should\n * not manipulate the content of this property.*/\n this.fields = [];\n /* Storage for the value. Capture a variable instead of using an\n * instance property because we don't want anything to change the\n * value without going through the mutator. */\n let value = 0;\n this._packedSetValue = function (v) {\n value = fixBitwiseResult(v);\n return this;\n };\n this._packedGetValue = function () {\n return value;\n };\n }\n /** @override */\n decode(b, offset = 0) {\n const dest = this.makeDestinationObject();\n const value = this.word.decode(b, offset);\n this._packedSetValue(value);\n for (const fd of this.fields) {\n if (undefined !== fd.property) {\n dest[fd.property] = fd.decode(b);\n }\n }\n return dest;\n }\n /** Implement {@link Layout#encode|encode} for {@link BitStructure}.\n *\n * If `src` is missing a property for a member with a defined {@link\n * Layout#property|property} the corresponding region of the packed\n * value is left unmodified. Unused bits are also left unmodified. */\n encode(src, b, offset = 0) {\n const value = this.word.decode(b, offset);\n this._packedSetValue(value);\n for (const fd of this.fields) {\n if (undefined !== fd.property) {\n const fv = src[fd.property];\n if (undefined !== fv) {\n fd.encode(fv);\n }\n }\n }\n return this.word.encode(this._packedGetValue(), b, offset);\n }\n /** Register a new bitfield with a containing bit structure. The\n * resulting bitfield is returned.\n *\n * @param {Number} bits - initializer for {@link BitField#bits|bits}.\n *\n * @param {string} property - initializer for {@link\n * Layout#property|property}.\n *\n * @return {BitField} */\n addField(bits, property) {\n const bf = new BitField(this, bits, property);\n this.fields.push(bf);\n return bf;\n }\n /** As with {@link BitStructure#addField|addField} for single-bit\n * fields with `boolean` value representation.\n *\n * @param {string} property - initializer for {@link\n * Layout#property|property}.\n *\n * @return {Boolean} */\n // `Boolean` conflicts with the native primitive type\n // eslint-disable-next-line @typescript-eslint/ban-types\n addBoolean(property) {\n // This is my Boolean, not the Javascript one.\n const bf = new Boolean(this, property);\n this.fields.push(bf);\n return bf;\n }\n /**\n * Get access to the bit field for a given property.\n *\n * @param {String} property - the bit field of interest.\n *\n * @return {BitField} - the field associated with `property`, or\n * undefined if there is no such property.\n */\n fieldFor(property) {\n if ('string' !== typeof property) {\n throw new TypeError('property must be string');\n }\n for (const fd of this.fields) {\n if (fd.property === property) {\n return fd;\n }\n }\n return undefined;\n }\n}\nexports.BitStructure = BitStructure;\n/**\n * Represent a sequence of bits within a {@link BitStructure}.\n *\n * All bit field values are represented as unsigned integers.\n *\n * **NOTE** User code should not invoke this constructor directly.\n * Use the container {@link BitStructure#addField|addField} helper\n * method.\n *\n * **NOTE** BitField instances are not instances of {@link Layout}\n * since {@link Layout#span|span} measures 8-bit units.\n *\n * @param {BitStructure} container - initializer for {@link\n * BitField#container|container}.\n *\n * @param {Number} bits - initializer for {@link BitField#bits|bits}.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n */\nclass BitField {\n constructor(container, bits, property) {\n if (!(container instanceof BitStructure)) {\n throw new TypeError('container must be a BitStructure');\n }\n if ((!Number.isInteger(bits)) || (0 >= bits)) {\n throw new TypeError('bits must be positive integer');\n }\n const totalBits = 8 * container.span;\n const usedBits = container.fields.reduce((sum, fd) => sum + fd.bits, 0);\n if ((bits + usedBits) > totalBits) {\n throw new Error('bits too long for span remainder ('\n + (totalBits - usedBits) + ' of '\n + totalBits + ' remain)');\n }\n /** The {@link BitStructure} instance to which this bit field\n * belongs. */\n this.container = container;\n /** The span of this value in bits. */\n this.bits = bits;\n /** A mask of {@link BitField#bits|bits} bits isolating value bits\n * that fit within the field.\n *\n * That is, it masks a value that has not yet been shifted into\n * position within its containing packed integer. */\n this.valueMask = (1 << bits) - 1;\n if (32 === bits) { // shifted value out of range\n this.valueMask = 0xFFFFFFFF;\n }\n /** The offset of the value within the containing packed unsigned\n * integer. The least significant bit of the packed value is at\n * offset zero, regardless of bit ordering used. */\n this.start = usedBits;\n if (this.container.msb) {\n this.start = totalBits - usedBits - bits;\n }\n /** A mask of {@link BitField#bits|bits} isolating the field value\n * within the containing packed unsigned integer. */\n this.wordMask = fixBitwiseResult(this.valueMask << this.start);\n /** The property name used when this bitfield is represented in an\n * Object.\n *\n * Intended to be functionally equivalent to {@link\n * Layout#property}.\n *\n * If left undefined the corresponding span of bits will be\n * treated as padding: it will not be mutated by {@link\n * Layout#encode|encode} nor represented as a property in the\n * decoded Object. */\n this.property = property;\n }\n /** Store a value into the corresponding subsequence of the containing\n * bit field. */\n decode(b, offset) {\n const word = this.container._packedGetValue();\n const wordValue = fixBitwiseResult(word & this.wordMask);\n const value = wordValue >>> this.start;\n return value;\n }\n /** Store a value into the corresponding subsequence of the containing\n * bit field.\n *\n * **NOTE** This is not a specialization of {@link\n * Layout#encode|Layout.encode} and there is no return value. */\n encode(value) {\n if ('number' !== typeof value\n || !Number.isInteger(value)\n || (value !== fixBitwiseResult(value & this.valueMask))) {\n throw new TypeError(nameWithProperty('BitField.encode', this)\n + ' value must be integer not exceeding ' + this.valueMask);\n }\n const word = this.container._packedGetValue();\n const wordValue = fixBitwiseResult(value << this.start);\n this.container._packedSetValue(fixBitwiseResult(word & ~this.wordMask)\n | wordValue);\n }\n}\nexports.BitField = BitField;\n/**\n * Represent a single bit within a {@link BitStructure} as a\n * JavaScript boolean.\n *\n * **NOTE** User code should not invoke this constructor directly.\n * Use the container {@link BitStructure#addBoolean|addBoolean} helper\n * method.\n *\n * @param {BitStructure} container - initializer for {@link\n * BitField#container|container}.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {BitField}\n */\n/* eslint-disable no-extend-native */\nclass Boolean extends BitField {\n constructor(container, property) {\n super(container, 1, property);\n }\n /** Override {@link BitField#decode|decode} for {@link Boolean|Boolean}.\n *\n * @returns {boolean} */\n decode(b, offset) {\n return !!super.decode(b, offset);\n }\n /** @override */\n encode(value) {\n if ('boolean' === typeof value) {\n // BitField requires integer values\n value = +value;\n }\n super.encode(value);\n }\n}\nexports.Boolean = Boolean;\n/* eslint-enable no-extend-native */\n/**\n * Contain a fixed-length block of arbitrary data, represented as a\n * Uint8Array.\n *\n * *Factory*: {@link module:Layout.blob|blob}\n *\n * @param {(Number|ExternalLayout)} length - initializes {@link\n * Blob#length|length}.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Blob extends Layout {\n constructor(length, property) {\n if (!(((length instanceof ExternalLayout) && length.isCount())\n || (Number.isInteger(length) && (0 <= length)))) {\n throw new TypeError('length must be positive integer '\n + 'or an unsigned integer ExternalLayout');\n }\n let span = -1;\n if (!(length instanceof ExternalLayout)) {\n span = length;\n }\n super(span, property);\n /** The number of bytes in the blob.\n *\n * This may be a non-negative integer, or an instance of {@link\n * ExternalLayout} that satisfies {@link\n * ExternalLayout#isCount|isCount()}. */\n this.length = length;\n }\n /** @override */\n getSpan(b, offset) {\n let span = this.span;\n if (0 > span) {\n span = this.length.decode(b, offset);\n }\n return span;\n }\n /** @override */\n decode(b, offset = 0) {\n let span = this.span;\n if (0 > span) {\n span = this.length.decode(b, offset);\n }\n return uint8ArrayToBuffer(b).slice(offset, offset + span);\n }\n /** Implement {@link Layout#encode|encode} for {@link Blob}.\n *\n * **NOTE** If {@link Layout#count|count} is an instance of {@link\n * ExternalLayout} then the length of `src` will be encoded as the\n * count after `src` is encoded. */\n encode(src, b, offset) {\n let span = this.length;\n if (this.length instanceof ExternalLayout) {\n span = src.length;\n }\n if (!(src instanceof Uint8Array && span === src.length)) {\n throw new TypeError(nameWithProperty('Blob.encode', this)\n + ' requires (length ' + span + ') Uint8Array as src');\n }\n if ((offset + span) > b.length) {\n throw new RangeError('encoding overruns Uint8Array');\n }\n const srcBuffer = uint8ArrayToBuffer(src);\n uint8ArrayToBuffer(b).write(srcBuffer.toString('hex'), offset, span, 'hex');\n if (this.length instanceof ExternalLayout) {\n this.length.encode(span, b, offset);\n }\n return span;\n }\n}\nexports.Blob = Blob;\n/**\n * Contain a `NUL`-terminated UTF8 string.\n *\n * *Factory*: {@link module:Layout.cstr|cstr}\n *\n * **NOTE** Any UTF8 string that incorporates a zero-valued byte will\n * not be correctly decoded by this layout.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass CString extends Layout {\n constructor(property) {\n super(-1, property);\n }\n /** @override */\n getSpan(b, offset = 0) {\n checkUint8Array(b);\n let idx = offset;\n while ((idx < b.length) && (0 !== b[idx])) {\n idx += 1;\n }\n return 1 + idx - offset;\n }\n /** @override */\n decode(b, offset = 0) {\n const span = this.getSpan(b, offset);\n return uint8ArrayToBuffer(b).slice(offset, offset + span - 1).toString('utf-8');\n }\n /** @override */\n encode(src, b, offset = 0) {\n /* Must force this to a string, lest it be a number and the\n * \"utf8-encoding\" below actually allocate a buffer of length\n * src */\n if ('string' !== typeof src) {\n src = String(src);\n }\n const srcb = buffer_1.Buffer.from(src, 'utf8');\n const span = srcb.length;\n if ((offset + span) > b.length) {\n throw new RangeError('encoding overruns Buffer');\n }\n const buffer = uint8ArrayToBuffer(b);\n srcb.copy(buffer, offset);\n buffer[offset + span] = 0;\n return span + 1;\n }\n}\nexports.CString = CString;\n/**\n * Contain a UTF8 string with implicit length.\n *\n * *Factory*: {@link module:Layout.utf8|utf8}\n *\n * **NOTE** Because the length is implicit in the size of the buffer\n * this layout should be used only in isolation, or in a situation\n * where the length can be expressed by operating on a slice of the\n * containing buffer.\n *\n * @param {Number} [maxSpan] - the maximum length allowed for encoded\n * string content. If not provided there is no bound on the allowed\n * content.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass UTF8 extends Layout {\n constructor(maxSpan, property) {\n if (('string' === typeof maxSpan) && (undefined === property)) {\n property = maxSpan;\n maxSpan = undefined;\n }\n if (undefined === maxSpan) {\n maxSpan = -1;\n }\n else if (!Number.isInteger(maxSpan)) {\n throw new TypeError('maxSpan must be an integer');\n }\n super(-1, property);\n /** The maximum span of the layout in bytes.\n *\n * Positive values are generally expected. Zero is abnormal.\n * Attempts to encode or decode a value that exceeds this length\n * will throw a `RangeError`.\n *\n * A negative value indicates that there is no bound on the length\n * of the content. */\n this.maxSpan = maxSpan;\n }\n /** @override */\n getSpan(b, offset = 0) {\n checkUint8Array(b);\n return b.length - offset;\n }\n /** @override */\n decode(b, offset = 0) {\n const span = this.getSpan(b, offset);\n if ((0 <= this.maxSpan)\n && (this.maxSpan < span)) {\n throw new RangeError('text length exceeds maxSpan');\n }\n return uint8ArrayToBuffer(b).slice(offset, offset + span).toString('utf-8');\n }\n /** @override */\n encode(src, b, offset = 0) {\n /* Must force this to a string, lest it be a number and the\n * \"utf8-encoding\" below actually allocate a buffer of length\n * src */\n if ('string' !== typeof src) {\n src = String(src);\n }\n const srcb = buffer_1.Buffer.from(src, 'utf8');\n const span = srcb.length;\n if ((0 <= this.maxSpan)\n && (this.maxSpan < span)) {\n throw new RangeError('text length exceeds maxSpan');\n }\n if ((offset + span) > b.length) {\n throw new RangeError('encoding overruns Buffer');\n }\n srcb.copy(uint8ArrayToBuffer(b), offset);\n return span;\n }\n}\nexports.UTF8 = UTF8;\n/**\n * Contain a constant value.\n *\n * This layout may be used in cases where a JavaScript value can be\n * inferred without an expression in the binary encoding. An example\n * would be a {@link VariantLayout|variant layout} where the content\n * is implied by the union {@link Union#discriminator|discriminator}.\n *\n * @param {Object|Number|String} value - initializer for {@link\n * Constant#value|value}. If the value is an object (or array) and\n * the application intends the object to remain unchanged regardless\n * of what is done to values decoded by this layout, the value should\n * be frozen prior passing it to this constructor.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Constant extends Layout {\n constructor(value, property) {\n super(0, property);\n /** The value produced by this constant when the layout is {@link\n * Constant#decode|decoded}.\n *\n * Any JavaScript value including `null` and `undefined` is\n * permitted.\n *\n * **WARNING** If `value` passed in the constructor was not\n * frozen, it is possible for users of decoded values to change\n * the content of the value. */\n this.value = value;\n }\n /** @override */\n decode(b, offset) {\n return this.value;\n }\n /** @override */\n encode(src, b, offset) {\n /* Constants take no space */\n return 0;\n }\n}\nexports.Constant = Constant;\n/** Factory for {@link GreedyCount}. */\nexports.greedy = ((elementSpan, property) => new GreedyCount(elementSpan, property));\n/** Factory for {@link OffsetLayout}. */\nexports.offset = ((layout, offset, property) => new OffsetLayout(layout, offset, property));\n/** Factory for {@link UInt|unsigned int layouts} spanning one\n * byte. */\nexports.u8 = ((property) => new UInt(1, property));\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning two bytes. */\nexports.u16 = ((property) => new UInt(2, property));\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning three bytes. */\nexports.u24 = ((property) => new UInt(3, property));\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning four bytes. */\nexports.u32 = ((property) => new UInt(4, property));\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning five bytes. */\nexports.u40 = ((property) => new UInt(5, property));\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning six bytes. */\nexports.u48 = ((property) => new UInt(6, property));\n/** Factory for {@link NearUInt64|little-endian unsigned int\n * layouts} interpreted as Numbers. */\nexports.nu64 = ((property) => new NearUInt64(property));\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning two bytes. */\nexports.u16be = ((property) => new UIntBE(2, property));\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning three bytes. */\nexports.u24be = ((property) => new UIntBE(3, property));\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning four bytes. */\nexports.u32be = ((property) => new UIntBE(4, property));\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning five bytes. */\nexports.u40be = ((property) => new UIntBE(5, property));\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning six bytes. */\nexports.u48be = ((property) => new UIntBE(6, property));\n/** Factory for {@link NearUInt64BE|big-endian unsigned int\n * layouts} interpreted as Numbers. */\nexports.nu64be = ((property) => new NearUInt64BE(property));\n/** Factory for {@link Int|signed int layouts} spanning one\n * byte. */\nexports.s8 = ((property) => new Int(1, property));\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning two bytes. */\nexports.s16 = ((property) => new Int(2, property));\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning three bytes. */\nexports.s24 = ((property) => new Int(3, property));\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning four bytes. */\nexports.s32 = ((property) => new Int(4, property));\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning five bytes. */\nexports.s40 = ((property) => new Int(5, property));\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning six bytes. */\nexports.s48 = ((property) => new Int(6, property));\n/** Factory for {@link NearInt64|little-endian signed int layouts}\n * interpreted as Numbers. */\nexports.ns64 = ((property) => new NearInt64(property));\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning two bytes. */\nexports.s16be = ((property) => new IntBE(2, property));\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning three bytes. */\nexports.s24be = ((property) => new IntBE(3, property));\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning four bytes. */\nexports.s32be = ((property) => new IntBE(4, property));\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning five bytes. */\nexports.s40be = ((property) => new IntBE(5, property));\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning six bytes. */\nexports.s48be = ((property) => new IntBE(6, property));\n/** Factory for {@link NearInt64BE|big-endian signed int layouts}\n * interpreted as Numbers. */\nexports.ns64be = ((property) => new NearInt64BE(property));\n/** Factory for {@link Float|little-endian 32-bit floating point} values. */\nexports.f32 = ((property) => new Float(property));\n/** Factory for {@link FloatBE|big-endian 32-bit floating point} values. */\nexports.f32be = ((property) => new FloatBE(property));\n/** Factory for {@link Double|little-endian 64-bit floating point} values. */\nexports.f64 = ((property) => new Double(property));\n/** Factory for {@link DoubleBE|big-endian 64-bit floating point} values. */\nexports.f64be = ((property) => new DoubleBE(property));\n/** Factory for {@link Structure} values. */\nexports.struct = ((fields, property, decodePrefixes) => new Structure(fields, property, decodePrefixes));\n/** Factory for {@link BitStructure} values. */\nexports.bits = ((word, msb, property) => new BitStructure(word, msb, property));\n/** Factory for {@link Sequence} values. */\nexports.seq = ((elementLayout, count, property) => new Sequence(elementLayout, count, property));\n/** Factory for {@link Union} values. */\nexports.union = ((discr, defaultLayout, property) => new Union(discr, defaultLayout, property));\n/** Factory for {@link UnionLayoutDiscriminator} values. */\nexports.unionLayoutDiscriminator = ((layout, property) => new UnionLayoutDiscriminator(layout, property));\n/** Factory for {@link Blob} values. */\nexports.blob = ((length, property) => new Blob(length, property));\n/** Factory for {@link CString} values. */\nexports.cstr = ((property) => new CString(property));\n/** Factory for {@link UTF8} values. */\nexports.utf8 = ((maxSpan, property) => new UTF8(maxSpan, property));\n/** Factory for {@link Constant} values. */\nexports.constant = ((value, property) => new Constant(value, property));\n//# sourceMappingURL=Layout.js.map","/**\n * Maximum over-the-wire size of a Transaction\n *\n * 1280 is IPv6 minimum MTU\n * 40 bytes is the size of the IPv6 header\n * 8 bytes is the size of the fragment header\n */\nexport const PACKET_DATA_SIZE = 1280 - 40 - 8;\n\nexport const VERSION_PREFIX_MASK = 0x7f;\n\nexport const SIGNATURE_LENGTH_IN_BYTES = 64;\n","export class TransactionExpiredBlockheightExceededError extends Error {\n signature: string;\n\n constructor(signature: string) {\n super(`Signature ${signature} has expired: block height exceeded.`);\n this.signature = signature;\n }\n}\n\nObject.defineProperty(\n TransactionExpiredBlockheightExceededError.prototype,\n 'name',\n {\n value: 'TransactionExpiredBlockheightExceededError',\n },\n);\n\nexport class TransactionExpiredTimeoutError extends Error {\n signature: string;\n\n constructor(signature: string, timeoutSeconds: number) {\n super(\n `Transaction was not confirmed in ${timeoutSeconds.toFixed(\n 2,\n )} seconds. It is ` +\n 'unknown if it succeeded or failed. Check signature ' +\n `${signature} using the Solana Explorer or CLI tools.`,\n );\n this.signature = signature;\n }\n}\n\nObject.defineProperty(TransactionExpiredTimeoutError.prototype, 'name', {\n value: 'TransactionExpiredTimeoutError',\n});\n\nexport class TransactionExpiredNonceInvalidError extends Error {\n signature: string;\n\n constructor(signature: string) {\n super(`Signature ${signature} has expired: the nonce is no longer valid.`);\n this.signature = signature;\n }\n}\n\nObject.defineProperty(TransactionExpiredNonceInvalidError.prototype, 'name', {\n value: 'TransactionExpiredNonceInvalidError',\n});\n","import {LoadedAddresses} from '../connection';\nimport {PublicKey} from '../publickey';\nimport {TransactionInstruction} from '../transaction';\nimport {MessageCompiledInstruction} from './index';\n\nexport type AccountKeysFromLookups = LoadedAddresses;\n\nexport class MessageAccountKeys {\n staticAccountKeys: Array;\n accountKeysFromLookups?: AccountKeysFromLookups;\n\n constructor(\n staticAccountKeys: Array,\n accountKeysFromLookups?: AccountKeysFromLookups,\n ) {\n this.staticAccountKeys = staticAccountKeys;\n this.accountKeysFromLookups = accountKeysFromLookups;\n }\n\n keySegments(): Array> {\n const keySegments = [this.staticAccountKeys];\n if (this.accountKeysFromLookups) {\n keySegments.push(this.accountKeysFromLookups.writable);\n keySegments.push(this.accountKeysFromLookups.readonly);\n }\n return keySegments;\n }\n\n get(index: number): PublicKey | undefined {\n for (const keySegment of this.keySegments()) {\n if (index < keySegment.length) {\n return keySegment[index];\n } else {\n index -= keySegment.length;\n }\n }\n return;\n }\n\n get length(): number {\n return this.keySegments().flat().length;\n }\n\n compileInstructions(\n instructions: Array,\n ): Array {\n // Bail early if any account indexes would overflow a u8\n const U8_MAX = 255;\n if (this.length > U8_MAX + 1) {\n throw new Error('Account index overflow encountered during compilation');\n }\n\n const keyIndexMap = new Map();\n this.keySegments()\n .flat()\n .forEach((key, index) => {\n keyIndexMap.set(key.toBase58(), index);\n });\n\n const findKeyIndex = (key: PublicKey) => {\n const keyIndex = keyIndexMap.get(key.toBase58());\n if (keyIndex === undefined)\n throw new Error(\n 'Encountered an unknown instruction account key during compilation',\n );\n return keyIndex;\n };\n\n return instructions.map((instruction): MessageCompiledInstruction => {\n return {\n programIdIndex: findKeyIndex(instruction.programId),\n accountKeyIndexes: instruction.keys.map(meta =>\n findKeyIndex(meta.pubkey),\n ),\n data: instruction.data,\n };\n });\n }\n}\n","import {Buffer} from 'buffer';\nimport * as BufferLayout from '@solana/buffer-layout';\n\nimport {VoteAuthorizeWithSeedArgs} from './programs/vote';\n\n/**\n * Layout for a public key\n */\nexport const publicKey = (property: string = 'publicKey') => {\n return BufferLayout.blob(32, property);\n};\n\n/**\n * Layout for a signature\n */\nexport const signature = (property: string = 'signature') => {\n return BufferLayout.blob(64, property);\n};\n\n/**\n * Layout for a 64bit unsigned value\n */\nexport const uint64 = (property: string = 'uint64') => {\n return BufferLayout.blob(8, property);\n};\n\ninterface IRustStringShim\n extends Omit<\n BufferLayout.Structure<\n Readonly<{\n length: number;\n lengthPadding: number;\n chars: Uint8Array;\n }>\n >,\n 'decode' | 'encode' | 'replicate'\n > {\n alloc: (str: string) => number;\n decode: (b: Uint8Array, offset?: number) => string;\n encode: (str: string, b: Uint8Array, offset?: number) => number;\n replicate: (property: string) => this;\n}\n\n/**\n * Layout for a Rust String type\n */\nexport const rustString = (\n property: string = 'string',\n): BufferLayout.Layout => {\n const rsl = BufferLayout.struct<\n Readonly<{\n length?: number;\n lengthPadding?: number;\n chars: Uint8Array;\n }>\n >(\n [\n BufferLayout.u32('length'),\n BufferLayout.u32('lengthPadding'),\n BufferLayout.blob(BufferLayout.offset(BufferLayout.u32(), -8), 'chars'),\n ],\n property,\n );\n const _decode = rsl.decode.bind(rsl);\n const _encode = rsl.encode.bind(rsl);\n\n const rslShim = rsl as unknown as IRustStringShim;\n\n rslShim.decode = (b: Uint8Array, offset?: number) => {\n const data = _decode(b, offset);\n return data['chars'].toString();\n };\n\n rslShim.encode = (str: string, b: Uint8Array, offset?: number) => {\n const data = {\n chars: Buffer.from(str, 'utf8'),\n };\n return _encode(data, b, offset);\n };\n\n rslShim.alloc = (str: string) => {\n return (\n BufferLayout.u32().span +\n BufferLayout.u32().span +\n Buffer.from(str, 'utf8').length\n );\n };\n\n return rslShim;\n};\n\n/**\n * Layout for an Authorized object\n */\nexport const authorized = (property: string = 'authorized') => {\n return BufferLayout.struct<\n Readonly<{\n staker: Uint8Array;\n withdrawer: Uint8Array;\n }>\n >([publicKey('staker'), publicKey('withdrawer')], property);\n};\n\n/**\n * Layout for a Lockup object\n */\nexport const lockup = (property: string = 'lockup') => {\n return BufferLayout.struct<\n Readonly<{\n custodian: Uint8Array;\n epoch: number;\n unixTimestamp: number;\n }>\n >(\n [\n BufferLayout.ns64('unixTimestamp'),\n BufferLayout.ns64('epoch'),\n publicKey('custodian'),\n ],\n property,\n );\n};\n\n/**\n * Layout for a VoteInit object\n */\nexport const voteInit = (property: string = 'voteInit') => {\n return BufferLayout.struct<\n Readonly<{\n authorizedVoter: Uint8Array;\n authorizedWithdrawer: Uint8Array;\n commission: number;\n nodePubkey: Uint8Array;\n }>\n >(\n [\n publicKey('nodePubkey'),\n publicKey('authorizedVoter'),\n publicKey('authorizedWithdrawer'),\n BufferLayout.u8('commission'),\n ],\n property,\n );\n};\n\n/**\n * Layout for a VoteAuthorizeWithSeedArgs object\n */\nexport const voteAuthorizeWithSeedArgs = (\n property: string = 'voteAuthorizeWithSeedArgs',\n) => {\n return BufferLayout.struct(\n [\n BufferLayout.u32('voteAuthorizationType'),\n publicKey('currentAuthorityDerivedKeyOwnerPubkey'),\n rustString('currentAuthorityDerivedKeySeed'),\n publicKey('newAuthorized'),\n ],\n property,\n );\n};\n\nexport function getAlloc(type: any, fields: any): number {\n const getItemAlloc = (item: any): number => {\n if (item.span >= 0) {\n return item.span;\n } else if (typeof item.alloc === 'function') {\n return item.alloc(fields[item.property]);\n } else if ('count' in item && 'elementLayout' in item) {\n const field = fields[item.property];\n if (Array.isArray(field)) {\n return field.length * getItemAlloc(item.elementLayout);\n }\n } else if ('fields' in item) {\n // This is a `Structure` whose size needs to be recursively measured.\n return getAlloc({layout: item}, fields[item.property]);\n }\n // Couldn't determine allocated size of layout\n return 0;\n };\n\n let alloc = 0;\n type.layout.fields.forEach((item: any) => {\n alloc += getItemAlloc(item);\n });\n\n return alloc;\n}\n","export function decodeLength(bytes: Array): number {\n let len = 0;\n let size = 0;\n for (;;) {\n let elem = bytes.shift() as number;\n len |= (elem & 0x7f) << (size * 7);\n size += 1;\n if ((elem & 0x80) === 0) {\n break;\n }\n }\n return len;\n}\n\nexport function encodeLength(bytes: Array, len: number) {\n let rem_len = len;\n for (;;) {\n let elem = rem_len & 0x7f;\n rem_len >>= 7;\n if (rem_len == 0) {\n bytes.push(elem);\n break;\n } else {\n elem |= 0x80;\n bytes.push(elem);\n }\n }\n}\n","export default function (\n condition: unknown,\n message?: string,\n): asserts condition {\n if (!condition) {\n throw new Error(message || 'Assertion failed');\n }\n}\n","import {MessageHeader, MessageAddressTableLookup} from './index';\nimport {AccountKeysFromLookups} from './account-keys';\nimport {AddressLookupTableAccount} from '../programs';\nimport {TransactionInstruction} from '../transaction';\nimport assert from '../utils/assert';\nimport {PublicKey} from '../publickey';\n\nexport type CompiledKeyMeta = {\n isSigner: boolean;\n isWritable: boolean;\n isInvoked: boolean;\n};\n\ntype KeyMetaMap = Map;\n\nexport class CompiledKeys {\n payer: PublicKey;\n keyMetaMap: KeyMetaMap;\n\n constructor(payer: PublicKey, keyMetaMap: KeyMetaMap) {\n this.payer = payer;\n this.keyMetaMap = keyMetaMap;\n }\n\n static compile(\n instructions: Array,\n payer: PublicKey,\n ): CompiledKeys {\n const keyMetaMap: KeyMetaMap = new Map();\n const getOrInsertDefault = (pubkey: PublicKey): CompiledKeyMeta => {\n const address = pubkey.toBase58();\n let keyMeta = keyMetaMap.get(address);\n if (keyMeta === undefined) {\n keyMeta = {\n isSigner: false,\n isWritable: false,\n isInvoked: false,\n };\n keyMetaMap.set(address, keyMeta);\n }\n return keyMeta;\n };\n\n const payerKeyMeta = getOrInsertDefault(payer);\n payerKeyMeta.isSigner = true;\n payerKeyMeta.isWritable = true;\n\n for (const ix of instructions) {\n getOrInsertDefault(ix.programId).isInvoked = true;\n for (const accountMeta of ix.keys) {\n const keyMeta = getOrInsertDefault(accountMeta.pubkey);\n keyMeta.isSigner ||= accountMeta.isSigner;\n keyMeta.isWritable ||= accountMeta.isWritable;\n }\n }\n\n return new CompiledKeys(payer, keyMetaMap);\n }\n\n getMessageComponents(): [MessageHeader, Array] {\n const mapEntries = [...this.keyMetaMap.entries()];\n assert(mapEntries.length <= 256, 'Max static account keys length exceeded');\n\n const writableSigners = mapEntries.filter(\n ([, meta]) => meta.isSigner && meta.isWritable,\n );\n const readonlySigners = mapEntries.filter(\n ([, meta]) => meta.isSigner && !meta.isWritable,\n );\n const writableNonSigners = mapEntries.filter(\n ([, meta]) => !meta.isSigner && meta.isWritable,\n );\n const readonlyNonSigners = mapEntries.filter(\n ([, meta]) => !meta.isSigner && !meta.isWritable,\n );\n\n const header: MessageHeader = {\n numRequiredSignatures: writableSigners.length + readonlySigners.length,\n numReadonlySignedAccounts: readonlySigners.length,\n numReadonlyUnsignedAccounts: readonlyNonSigners.length,\n };\n\n // sanity checks\n {\n assert(\n writableSigners.length > 0,\n 'Expected at least one writable signer key',\n );\n const [payerAddress] = writableSigners[0];\n assert(\n payerAddress === this.payer.toBase58(),\n 'Expected first writable signer key to be the fee payer',\n );\n }\n\n const staticAccountKeys = [\n ...writableSigners.map(([address]) => new PublicKey(address)),\n ...readonlySigners.map(([address]) => new PublicKey(address)),\n ...writableNonSigners.map(([address]) => new PublicKey(address)),\n ...readonlyNonSigners.map(([address]) => new PublicKey(address)),\n ];\n\n return [header, staticAccountKeys];\n }\n\n extractTableLookup(\n lookupTable: AddressLookupTableAccount,\n ): [MessageAddressTableLookup, AccountKeysFromLookups] | undefined {\n const [writableIndexes, drainedWritableKeys] =\n this.drainKeysFoundInLookupTable(\n lookupTable.state.addresses,\n keyMeta =>\n !keyMeta.isSigner && !keyMeta.isInvoked && keyMeta.isWritable,\n );\n const [readonlyIndexes, drainedReadonlyKeys] =\n this.drainKeysFoundInLookupTable(\n lookupTable.state.addresses,\n keyMeta =>\n !keyMeta.isSigner && !keyMeta.isInvoked && !keyMeta.isWritable,\n );\n\n // Don't extract lookup if no keys were found\n if (writableIndexes.length === 0 && readonlyIndexes.length === 0) {\n return;\n }\n\n return [\n {\n accountKey: lookupTable.key,\n writableIndexes,\n readonlyIndexes,\n },\n {\n writable: drainedWritableKeys,\n readonly: drainedReadonlyKeys,\n },\n ];\n }\n\n /** @internal */\n private drainKeysFoundInLookupTable(\n lookupTableEntries: Array,\n keyMetaFilter: (keyMeta: CompiledKeyMeta) => boolean,\n ): [Array, Array] {\n const lookupTableIndexes = new Array();\n const drainedKeys = new Array();\n\n for (const [address, keyMeta] of this.keyMetaMap.entries()) {\n if (keyMetaFilter(keyMeta)) {\n const key = new PublicKey(address);\n const lookupTableIndex = lookupTableEntries.findIndex(entry =>\n entry.equals(key),\n );\n if (lookupTableIndex >= 0) {\n assert(lookupTableIndex < 256, 'Max lookup table index exceeded');\n lookupTableIndexes.push(lookupTableIndex);\n drainedKeys.push(key);\n this.keyMetaMap.delete(address);\n }\n }\n }\n\n return [lookupTableIndexes, drainedKeys];\n }\n}\n","const END_OF_BUFFER_ERROR_MESSAGE = 'Reached end of buffer unexpectedly';\n\n/**\n * Delegates to `Array#shift`, but throws if the array is zero-length.\n */\nexport function guardedShift(byteArray: T[]): T {\n if (byteArray.length === 0) {\n throw new Error(END_OF_BUFFER_ERROR_MESSAGE);\n }\n return byteArray.shift() as T;\n}\n\n/**\n * Delegates to `Array#splice`, but throws if the section being spliced out extends past the end of\n * the array.\n */\nexport function guardedSplice(\n byteArray: T[],\n ...args:\n | [start: number, deleteCount?: number]\n | [start: number, deleteCount: number, ...items: T[]]\n): T[] {\n const [start] = args;\n if (\n args.length === 2 // Implies that `deleteCount` was supplied\n ? start + (args[1] ?? 0) > byteArray.length\n : start >= byteArray.length\n ) {\n throw new Error(END_OF_BUFFER_ERROR_MESSAGE);\n }\n return byteArray.splice(\n ...(args as Parameters),\n );\n}\n","import bs58 from 'bs58';\nimport {Buffer} from 'buffer';\nimport * as BufferLayout from '@solana/buffer-layout';\n\nimport {PublicKey, PUBLIC_KEY_LENGTH} from '../publickey';\nimport type {Blockhash} from '../blockhash';\nimport * as Layout from '../layout';\nimport {PACKET_DATA_SIZE, VERSION_PREFIX_MASK} from '../transaction/constants';\nimport * as shortvec from '../utils/shortvec-encoding';\nimport {toBuffer} from '../utils/to-buffer';\nimport {\n MessageHeader,\n MessageAddressTableLookup,\n MessageCompiledInstruction,\n} from './index';\nimport {TransactionInstruction} from '../transaction';\nimport {CompiledKeys} from './compiled-keys';\nimport {MessageAccountKeys} from './account-keys';\nimport {guardedShift, guardedSplice} from '../utils/guarded-array-utils';\n\n/**\n * An instruction to execute by a program\n *\n * @property {number} programIdIndex\n * @property {number[]} accounts\n * @property {string} data\n */\nexport type CompiledInstruction = {\n /** Index into the transaction keys array indicating the program account that executes this instruction */\n programIdIndex: number;\n /** Ordered indices into the transaction keys array indicating which accounts to pass to the program */\n accounts: number[];\n /** The program input data encoded as base 58 */\n data: string;\n};\n\n/**\n * Message constructor arguments\n */\nexport type MessageArgs = {\n /** The message header, identifying signed and read-only `accountKeys` */\n header: MessageHeader;\n /** All the account keys used by this transaction */\n accountKeys: string[] | PublicKey[];\n /** The hash of a recent ledger block */\n recentBlockhash: Blockhash;\n /** Instructions that will be executed in sequence and committed in one atomic transaction if all succeed. */\n instructions: CompiledInstruction[];\n};\n\nexport type CompileLegacyArgs = {\n payerKey: PublicKey;\n instructions: Array;\n recentBlockhash: Blockhash;\n};\n\n/**\n * List of instructions to be processed atomically\n */\nexport class Message {\n header: MessageHeader;\n accountKeys: PublicKey[];\n recentBlockhash: Blockhash;\n instructions: CompiledInstruction[];\n\n private indexToProgramIds: Map = new Map<\n number,\n PublicKey\n >();\n\n constructor(args: MessageArgs) {\n this.header = args.header;\n this.accountKeys = args.accountKeys.map(account => new PublicKey(account));\n this.recentBlockhash = args.recentBlockhash;\n this.instructions = args.instructions;\n this.instructions.forEach(ix =>\n this.indexToProgramIds.set(\n ix.programIdIndex,\n this.accountKeys[ix.programIdIndex],\n ),\n );\n }\n\n get version(): 'legacy' {\n return 'legacy';\n }\n\n get staticAccountKeys(): Array {\n return this.accountKeys;\n }\n\n get compiledInstructions(): Array {\n return this.instructions.map(\n (ix): MessageCompiledInstruction => ({\n programIdIndex: ix.programIdIndex,\n accountKeyIndexes: ix.accounts,\n data: bs58.decode(ix.data),\n }),\n );\n }\n\n get addressTableLookups(): Array {\n return [];\n }\n\n getAccountKeys(): MessageAccountKeys {\n return new MessageAccountKeys(this.staticAccountKeys);\n }\n\n static compile(args: CompileLegacyArgs): Message {\n const compiledKeys = CompiledKeys.compile(args.instructions, args.payerKey);\n const [header, staticAccountKeys] = compiledKeys.getMessageComponents();\n const accountKeys = new MessageAccountKeys(staticAccountKeys);\n const instructions = accountKeys.compileInstructions(args.instructions).map(\n (ix: MessageCompiledInstruction): CompiledInstruction => ({\n programIdIndex: ix.programIdIndex,\n accounts: ix.accountKeyIndexes,\n data: bs58.encode(ix.data),\n }),\n );\n return new Message({\n header,\n accountKeys: staticAccountKeys,\n recentBlockhash: args.recentBlockhash,\n instructions,\n });\n }\n\n isAccountSigner(index: number): boolean {\n return index < this.header.numRequiredSignatures;\n }\n\n isAccountWritable(index: number): boolean {\n const numSignedAccounts = this.header.numRequiredSignatures;\n if (index >= this.header.numRequiredSignatures) {\n const unsignedAccountIndex = index - numSignedAccounts;\n const numUnsignedAccounts = this.accountKeys.length - numSignedAccounts;\n const numWritableUnsignedAccounts =\n numUnsignedAccounts - this.header.numReadonlyUnsignedAccounts;\n return unsignedAccountIndex < numWritableUnsignedAccounts;\n } else {\n const numWritableSignedAccounts =\n numSignedAccounts - this.header.numReadonlySignedAccounts;\n return index < numWritableSignedAccounts;\n }\n }\n\n isProgramId(index: number): boolean {\n return this.indexToProgramIds.has(index);\n }\n\n programIds(): PublicKey[] {\n return [...this.indexToProgramIds.values()];\n }\n\n nonProgramIds(): PublicKey[] {\n return this.accountKeys.filter((_, index) => !this.isProgramId(index));\n }\n\n serialize(): Buffer {\n const numKeys = this.accountKeys.length;\n\n let keyCount: number[] = [];\n shortvec.encodeLength(keyCount, numKeys);\n\n const instructions = this.instructions.map(instruction => {\n const {accounts, programIdIndex} = instruction;\n const data = Array.from(bs58.decode(instruction.data));\n\n let keyIndicesCount: number[] = [];\n shortvec.encodeLength(keyIndicesCount, accounts.length);\n\n let dataCount: number[] = [];\n shortvec.encodeLength(dataCount, data.length);\n\n return {\n programIdIndex,\n keyIndicesCount: Buffer.from(keyIndicesCount),\n keyIndices: accounts,\n dataLength: Buffer.from(dataCount),\n data,\n };\n });\n\n let instructionCount: number[] = [];\n shortvec.encodeLength(instructionCount, instructions.length);\n let instructionBuffer = Buffer.alloc(PACKET_DATA_SIZE);\n Buffer.from(instructionCount).copy(instructionBuffer);\n let instructionBufferLength = instructionCount.length;\n\n instructions.forEach(instruction => {\n const instructionLayout = BufferLayout.struct<\n Readonly<{\n data: number[];\n dataLength: Uint8Array;\n keyIndices: number[];\n keyIndicesCount: Uint8Array;\n programIdIndex: number;\n }>\n >([\n BufferLayout.u8('programIdIndex'),\n\n BufferLayout.blob(\n instruction.keyIndicesCount.length,\n 'keyIndicesCount',\n ),\n BufferLayout.seq(\n BufferLayout.u8('keyIndex'),\n instruction.keyIndices.length,\n 'keyIndices',\n ),\n BufferLayout.blob(instruction.dataLength.length, 'dataLength'),\n BufferLayout.seq(\n BufferLayout.u8('userdatum'),\n instruction.data.length,\n 'data',\n ),\n ]);\n const length = instructionLayout.encode(\n instruction,\n instructionBuffer,\n instructionBufferLength,\n );\n instructionBufferLength += length;\n });\n instructionBuffer = instructionBuffer.slice(0, instructionBufferLength);\n\n const signDataLayout = BufferLayout.struct<\n Readonly<{\n keyCount: Uint8Array;\n keys: Uint8Array[];\n numReadonlySignedAccounts: Uint8Array;\n numReadonlyUnsignedAccounts: Uint8Array;\n numRequiredSignatures: Uint8Array;\n recentBlockhash: Uint8Array;\n }>\n >([\n BufferLayout.blob(1, 'numRequiredSignatures'),\n BufferLayout.blob(1, 'numReadonlySignedAccounts'),\n BufferLayout.blob(1, 'numReadonlyUnsignedAccounts'),\n BufferLayout.blob(keyCount.length, 'keyCount'),\n BufferLayout.seq(Layout.publicKey('key'), numKeys, 'keys'),\n Layout.publicKey('recentBlockhash'),\n ]);\n\n const transaction = {\n numRequiredSignatures: Buffer.from([this.header.numRequiredSignatures]),\n numReadonlySignedAccounts: Buffer.from([\n this.header.numReadonlySignedAccounts,\n ]),\n numReadonlyUnsignedAccounts: Buffer.from([\n this.header.numReadonlyUnsignedAccounts,\n ]),\n keyCount: Buffer.from(keyCount),\n keys: this.accountKeys.map(key => toBuffer(key.toBytes())),\n recentBlockhash: bs58.decode(this.recentBlockhash),\n };\n\n let signData = Buffer.alloc(2048);\n const length = signDataLayout.encode(transaction, signData);\n instructionBuffer.copy(signData, length);\n return signData.slice(0, length + instructionBuffer.length);\n }\n\n /**\n * Decode a compiled message into a Message object.\n */\n static from(buffer: Buffer | Uint8Array | Array): Message {\n // Slice up wire data\n let byteArray = [...buffer];\n\n const numRequiredSignatures = guardedShift(byteArray);\n if (\n numRequiredSignatures !==\n (numRequiredSignatures & VERSION_PREFIX_MASK)\n ) {\n throw new Error(\n 'Versioned messages must be deserialized with VersionedMessage.deserialize()',\n );\n }\n\n const numReadonlySignedAccounts = guardedShift(byteArray);\n const numReadonlyUnsignedAccounts = guardedShift(byteArray);\n\n const accountCount = shortvec.decodeLength(byteArray);\n let accountKeys = [];\n for (let i = 0; i < accountCount; i++) {\n const account = guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH);\n accountKeys.push(new PublicKey(Buffer.from(account)));\n }\n\n const recentBlockhash = guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH);\n\n const instructionCount = shortvec.decodeLength(byteArray);\n let instructions: CompiledInstruction[] = [];\n for (let i = 0; i < instructionCount; i++) {\n const programIdIndex = guardedShift(byteArray);\n const accountCount = shortvec.decodeLength(byteArray);\n const accounts = guardedSplice(byteArray, 0, accountCount);\n const dataLength = shortvec.decodeLength(byteArray);\n const dataSlice = guardedSplice(byteArray, 0, dataLength);\n const data = bs58.encode(Buffer.from(dataSlice));\n instructions.push({\n programIdIndex,\n accounts,\n data,\n });\n }\n\n const messageArgs = {\n header: {\n numRequiredSignatures,\n numReadonlySignedAccounts,\n numReadonlyUnsignedAccounts,\n },\n recentBlockhash: bs58.encode(Buffer.from(recentBlockhash)),\n accountKeys,\n instructions,\n };\n\n return new Message(messageArgs);\n }\n}\n","import bs58 from 'bs58';\nimport * as BufferLayout from '@solana/buffer-layout';\n\nimport * as Layout from '../layout';\nimport {Blockhash} from '../blockhash';\nimport {\n MessageHeader,\n MessageAddressTableLookup,\n MessageCompiledInstruction,\n} from './index';\nimport {PublicKey, PUBLIC_KEY_LENGTH} from '../publickey';\nimport * as shortvec from '../utils/shortvec-encoding';\nimport assert from '../utils/assert';\nimport {PACKET_DATA_SIZE, VERSION_PREFIX_MASK} from '../transaction/constants';\nimport {TransactionInstruction} from '../transaction';\nimport {AddressLookupTableAccount} from '../programs';\nimport {CompiledKeys} from './compiled-keys';\nimport {AccountKeysFromLookups, MessageAccountKeys} from './account-keys';\nimport {guardedShift, guardedSplice} from '../utils/guarded-array-utils';\n\n/**\n * Message constructor arguments\n */\nexport type MessageV0Args = {\n /** The message header, identifying signed and read-only `accountKeys` */\n header: MessageHeader;\n /** The static account keys used by this transaction */\n staticAccountKeys: PublicKey[];\n /** The hash of a recent ledger block */\n recentBlockhash: Blockhash;\n /** Instructions that will be executed in sequence and committed in one atomic transaction if all succeed. */\n compiledInstructions: MessageCompiledInstruction[];\n /** Instructions that will be executed in sequence and committed in one atomic transaction if all succeed. */\n addressTableLookups: MessageAddressTableLookup[];\n};\n\nexport type CompileV0Args = {\n payerKey: PublicKey;\n instructions: Array;\n recentBlockhash: Blockhash;\n addressLookupTableAccounts?: Array;\n};\n\nexport type GetAccountKeysArgs =\n | {\n accountKeysFromLookups?: AccountKeysFromLookups | null;\n }\n | {\n addressLookupTableAccounts?: AddressLookupTableAccount[] | null;\n };\n\nexport class MessageV0 {\n header: MessageHeader;\n staticAccountKeys: Array;\n recentBlockhash: Blockhash;\n compiledInstructions: Array;\n addressTableLookups: Array;\n\n constructor(args: MessageV0Args) {\n this.header = args.header;\n this.staticAccountKeys = args.staticAccountKeys;\n this.recentBlockhash = args.recentBlockhash;\n this.compiledInstructions = args.compiledInstructions;\n this.addressTableLookups = args.addressTableLookups;\n }\n\n get version(): 0 {\n return 0;\n }\n\n get numAccountKeysFromLookups(): number {\n let count = 0;\n for (const lookup of this.addressTableLookups) {\n count += lookup.readonlyIndexes.length + lookup.writableIndexes.length;\n }\n return count;\n }\n\n getAccountKeys(args?: GetAccountKeysArgs): MessageAccountKeys {\n let accountKeysFromLookups: AccountKeysFromLookups | undefined;\n if (\n args &&\n 'accountKeysFromLookups' in args &&\n args.accountKeysFromLookups\n ) {\n if (\n this.numAccountKeysFromLookups !=\n args.accountKeysFromLookups.writable.length +\n args.accountKeysFromLookups.readonly.length\n ) {\n throw new Error(\n 'Failed to get account keys because of a mismatch in the number of account keys from lookups',\n );\n }\n accountKeysFromLookups = args.accountKeysFromLookups;\n } else if (\n args &&\n 'addressLookupTableAccounts' in args &&\n args.addressLookupTableAccounts\n ) {\n accountKeysFromLookups = this.resolveAddressTableLookups(\n args.addressLookupTableAccounts,\n );\n } else if (this.addressTableLookups.length > 0) {\n throw new Error(\n 'Failed to get account keys because address table lookups were not resolved',\n );\n }\n return new MessageAccountKeys(\n this.staticAccountKeys,\n accountKeysFromLookups,\n );\n }\n\n isAccountSigner(index: number): boolean {\n return index < this.header.numRequiredSignatures;\n }\n\n isAccountWritable(index: number): boolean {\n const numSignedAccounts = this.header.numRequiredSignatures;\n const numStaticAccountKeys = this.staticAccountKeys.length;\n if (index >= numStaticAccountKeys) {\n const lookupAccountKeysIndex = index - numStaticAccountKeys;\n const numWritableLookupAccountKeys = this.addressTableLookups.reduce(\n (count, lookup) => count + lookup.writableIndexes.length,\n 0,\n );\n return lookupAccountKeysIndex < numWritableLookupAccountKeys;\n } else if (index >= this.header.numRequiredSignatures) {\n const unsignedAccountIndex = index - numSignedAccounts;\n const numUnsignedAccounts = numStaticAccountKeys - numSignedAccounts;\n const numWritableUnsignedAccounts =\n numUnsignedAccounts - this.header.numReadonlyUnsignedAccounts;\n return unsignedAccountIndex < numWritableUnsignedAccounts;\n } else {\n const numWritableSignedAccounts =\n numSignedAccounts - this.header.numReadonlySignedAccounts;\n return index < numWritableSignedAccounts;\n }\n }\n\n resolveAddressTableLookups(\n addressLookupTableAccounts: AddressLookupTableAccount[],\n ): AccountKeysFromLookups {\n const accountKeysFromLookups: AccountKeysFromLookups = {\n writable: [],\n readonly: [],\n };\n\n for (const tableLookup of this.addressTableLookups) {\n const tableAccount = addressLookupTableAccounts.find(account =>\n account.key.equals(tableLookup.accountKey),\n );\n if (!tableAccount) {\n throw new Error(\n `Failed to find address lookup table account for table key ${tableLookup.accountKey.toBase58()}`,\n );\n }\n\n for (const index of tableLookup.writableIndexes) {\n if (index < tableAccount.state.addresses.length) {\n accountKeysFromLookups.writable.push(\n tableAccount.state.addresses[index],\n );\n } else {\n throw new Error(\n `Failed to find address for index ${index} in address lookup table ${tableLookup.accountKey.toBase58()}`,\n );\n }\n }\n\n for (const index of tableLookup.readonlyIndexes) {\n if (index < tableAccount.state.addresses.length) {\n accountKeysFromLookups.readonly.push(\n tableAccount.state.addresses[index],\n );\n } else {\n throw new Error(\n `Failed to find address for index ${index} in address lookup table ${tableLookup.accountKey.toBase58()}`,\n );\n }\n }\n }\n\n return accountKeysFromLookups;\n }\n\n static compile(args: CompileV0Args): MessageV0 {\n const compiledKeys = CompiledKeys.compile(args.instructions, args.payerKey);\n\n const addressTableLookups = new Array();\n const accountKeysFromLookups: AccountKeysFromLookups = {\n writable: new Array(),\n readonly: new Array(),\n };\n const lookupTableAccounts = args.addressLookupTableAccounts || [];\n for (const lookupTable of lookupTableAccounts) {\n const extractResult = compiledKeys.extractTableLookup(lookupTable);\n if (extractResult !== undefined) {\n const [addressTableLookup, {writable, readonly}] = extractResult;\n addressTableLookups.push(addressTableLookup);\n accountKeysFromLookups.writable.push(...writable);\n accountKeysFromLookups.readonly.push(...readonly);\n }\n }\n\n const [header, staticAccountKeys] = compiledKeys.getMessageComponents();\n const accountKeys = new MessageAccountKeys(\n staticAccountKeys,\n accountKeysFromLookups,\n );\n const compiledInstructions = accountKeys.compileInstructions(\n args.instructions,\n );\n return new MessageV0({\n header,\n staticAccountKeys,\n recentBlockhash: args.recentBlockhash,\n compiledInstructions,\n addressTableLookups,\n });\n }\n\n serialize(): Uint8Array {\n const encodedStaticAccountKeysLength = Array();\n shortvec.encodeLength(\n encodedStaticAccountKeysLength,\n this.staticAccountKeys.length,\n );\n\n const serializedInstructions = this.serializeInstructions();\n const encodedInstructionsLength = Array();\n shortvec.encodeLength(\n encodedInstructionsLength,\n this.compiledInstructions.length,\n );\n\n const serializedAddressTableLookups = this.serializeAddressTableLookups();\n const encodedAddressTableLookupsLength = Array();\n shortvec.encodeLength(\n encodedAddressTableLookupsLength,\n this.addressTableLookups.length,\n );\n\n const messageLayout = BufferLayout.struct<{\n prefix: number;\n header: MessageHeader;\n staticAccountKeysLength: Uint8Array;\n staticAccountKeys: Array;\n recentBlockhash: Uint8Array;\n instructionsLength: Uint8Array;\n serializedInstructions: Uint8Array;\n addressTableLookupsLength: Uint8Array;\n serializedAddressTableLookups: Uint8Array;\n }>([\n BufferLayout.u8('prefix'),\n BufferLayout.struct(\n [\n BufferLayout.u8('numRequiredSignatures'),\n BufferLayout.u8('numReadonlySignedAccounts'),\n BufferLayout.u8('numReadonlyUnsignedAccounts'),\n ],\n 'header',\n ),\n BufferLayout.blob(\n encodedStaticAccountKeysLength.length,\n 'staticAccountKeysLength',\n ),\n BufferLayout.seq(\n Layout.publicKey(),\n this.staticAccountKeys.length,\n 'staticAccountKeys',\n ),\n Layout.publicKey('recentBlockhash'),\n BufferLayout.blob(encodedInstructionsLength.length, 'instructionsLength'),\n BufferLayout.blob(\n serializedInstructions.length,\n 'serializedInstructions',\n ),\n BufferLayout.blob(\n encodedAddressTableLookupsLength.length,\n 'addressTableLookupsLength',\n ),\n BufferLayout.blob(\n serializedAddressTableLookups.length,\n 'serializedAddressTableLookups',\n ),\n ]);\n\n const serializedMessage = new Uint8Array(PACKET_DATA_SIZE);\n const MESSAGE_VERSION_0_PREFIX = 1 << 7;\n const serializedMessageLength = messageLayout.encode(\n {\n prefix: MESSAGE_VERSION_0_PREFIX,\n header: this.header,\n staticAccountKeysLength: new Uint8Array(encodedStaticAccountKeysLength),\n staticAccountKeys: this.staticAccountKeys.map(key => key.toBytes()),\n recentBlockhash: bs58.decode(this.recentBlockhash),\n instructionsLength: new Uint8Array(encodedInstructionsLength),\n serializedInstructions,\n addressTableLookupsLength: new Uint8Array(\n encodedAddressTableLookupsLength,\n ),\n serializedAddressTableLookups,\n },\n serializedMessage,\n );\n return serializedMessage.slice(0, serializedMessageLength);\n }\n\n private serializeInstructions(): Uint8Array {\n let serializedLength = 0;\n const serializedInstructions = new Uint8Array(PACKET_DATA_SIZE);\n for (const instruction of this.compiledInstructions) {\n const encodedAccountKeyIndexesLength = Array();\n shortvec.encodeLength(\n encodedAccountKeyIndexesLength,\n instruction.accountKeyIndexes.length,\n );\n\n const encodedDataLength = Array();\n shortvec.encodeLength(encodedDataLength, instruction.data.length);\n\n const instructionLayout = BufferLayout.struct<{\n programIdIndex: number;\n encodedAccountKeyIndexesLength: Uint8Array;\n accountKeyIndexes: number[];\n encodedDataLength: Uint8Array;\n data: Uint8Array;\n }>([\n BufferLayout.u8('programIdIndex'),\n BufferLayout.blob(\n encodedAccountKeyIndexesLength.length,\n 'encodedAccountKeyIndexesLength',\n ),\n BufferLayout.seq(\n BufferLayout.u8(),\n instruction.accountKeyIndexes.length,\n 'accountKeyIndexes',\n ),\n BufferLayout.blob(encodedDataLength.length, 'encodedDataLength'),\n BufferLayout.blob(instruction.data.length, 'data'),\n ]);\n\n serializedLength += instructionLayout.encode(\n {\n programIdIndex: instruction.programIdIndex,\n encodedAccountKeyIndexesLength: new Uint8Array(\n encodedAccountKeyIndexesLength,\n ),\n accountKeyIndexes: instruction.accountKeyIndexes,\n encodedDataLength: new Uint8Array(encodedDataLength),\n data: instruction.data,\n },\n serializedInstructions,\n serializedLength,\n );\n }\n\n return serializedInstructions.slice(0, serializedLength);\n }\n\n private serializeAddressTableLookups(): Uint8Array {\n let serializedLength = 0;\n const serializedAddressTableLookups = new Uint8Array(PACKET_DATA_SIZE);\n for (const lookup of this.addressTableLookups) {\n const encodedWritableIndexesLength = Array();\n shortvec.encodeLength(\n encodedWritableIndexesLength,\n lookup.writableIndexes.length,\n );\n\n const encodedReadonlyIndexesLength = Array();\n shortvec.encodeLength(\n encodedReadonlyIndexesLength,\n lookup.readonlyIndexes.length,\n );\n\n const addressTableLookupLayout = BufferLayout.struct<{\n accountKey: Uint8Array;\n encodedWritableIndexesLength: Uint8Array;\n writableIndexes: number[];\n encodedReadonlyIndexesLength: Uint8Array;\n readonlyIndexes: number[];\n }>([\n Layout.publicKey('accountKey'),\n BufferLayout.blob(\n encodedWritableIndexesLength.length,\n 'encodedWritableIndexesLength',\n ),\n BufferLayout.seq(\n BufferLayout.u8(),\n lookup.writableIndexes.length,\n 'writableIndexes',\n ),\n BufferLayout.blob(\n encodedReadonlyIndexesLength.length,\n 'encodedReadonlyIndexesLength',\n ),\n BufferLayout.seq(\n BufferLayout.u8(),\n lookup.readonlyIndexes.length,\n 'readonlyIndexes',\n ),\n ]);\n\n serializedLength += addressTableLookupLayout.encode(\n {\n accountKey: lookup.accountKey.toBytes(),\n encodedWritableIndexesLength: new Uint8Array(\n encodedWritableIndexesLength,\n ),\n writableIndexes: lookup.writableIndexes,\n encodedReadonlyIndexesLength: new Uint8Array(\n encodedReadonlyIndexesLength,\n ),\n readonlyIndexes: lookup.readonlyIndexes,\n },\n serializedAddressTableLookups,\n serializedLength,\n );\n }\n\n return serializedAddressTableLookups.slice(0, serializedLength);\n }\n\n static deserialize(serializedMessage: Uint8Array): MessageV0 {\n let byteArray = [...serializedMessage];\n\n const prefix = guardedShift(byteArray);\n const maskedPrefix = prefix & VERSION_PREFIX_MASK;\n assert(\n prefix !== maskedPrefix,\n `Expected versioned message but received legacy message`,\n );\n\n const version = maskedPrefix;\n assert(\n version === 0,\n `Expected versioned message with version 0 but found version ${version}`,\n );\n\n const header: MessageHeader = {\n numRequiredSignatures: guardedShift(byteArray),\n numReadonlySignedAccounts: guardedShift(byteArray),\n numReadonlyUnsignedAccounts: guardedShift(byteArray),\n };\n\n const staticAccountKeys = [];\n const staticAccountKeysLength = shortvec.decodeLength(byteArray);\n for (let i = 0; i < staticAccountKeysLength; i++) {\n staticAccountKeys.push(\n new PublicKey(guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH)),\n );\n }\n\n const recentBlockhash = bs58.encode(\n guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH),\n );\n\n const instructionCount = shortvec.decodeLength(byteArray);\n const compiledInstructions: MessageCompiledInstruction[] = [];\n for (let i = 0; i < instructionCount; i++) {\n const programIdIndex = guardedShift(byteArray);\n const accountKeyIndexesLength = shortvec.decodeLength(byteArray);\n const accountKeyIndexes = guardedSplice(\n byteArray,\n 0,\n accountKeyIndexesLength,\n );\n const dataLength = shortvec.decodeLength(byteArray);\n const data = new Uint8Array(guardedSplice(byteArray, 0, dataLength));\n compiledInstructions.push({\n programIdIndex,\n accountKeyIndexes,\n data,\n });\n }\n\n const addressTableLookupsCount = shortvec.decodeLength(byteArray);\n const addressTableLookups: MessageAddressTableLookup[] = [];\n for (let i = 0; i < addressTableLookupsCount; i++) {\n const accountKey = new PublicKey(\n guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH),\n );\n const writableIndexesLength = shortvec.decodeLength(byteArray);\n const writableIndexes = guardedSplice(\n byteArray,\n 0,\n writableIndexesLength,\n );\n const readonlyIndexesLength = shortvec.decodeLength(byteArray);\n const readonlyIndexes = guardedSplice(\n byteArray,\n 0,\n readonlyIndexesLength,\n );\n addressTableLookups.push({\n accountKey,\n writableIndexes,\n readonlyIndexes,\n });\n }\n\n return new MessageV0({\n header,\n staticAccountKeys,\n recentBlockhash,\n compiledInstructions,\n addressTableLookups,\n });\n }\n}\n","import {VERSION_PREFIX_MASK} from '../transaction/constants';\nimport {Message} from './legacy';\nimport {MessageV0} from './v0';\n\nexport type VersionedMessage = Message | MessageV0;\n// eslint-disable-next-line no-redeclare\nexport const VersionedMessage = {\n deserializeMessageVersion(serializedMessage: Uint8Array): 'legacy' | number {\n const prefix = serializedMessage[0];\n const maskedPrefix = prefix & VERSION_PREFIX_MASK;\n\n // if the highest bit of the prefix is not set, the message is not versioned\n if (maskedPrefix === prefix) {\n return 'legacy';\n }\n\n // the lower 7 bits of the prefix indicate the message version\n return maskedPrefix;\n },\n\n deserialize: (serializedMessage: Uint8Array): VersionedMessage => {\n const version =\n VersionedMessage.deserializeMessageVersion(serializedMessage);\n if (version === 'legacy') {\n return Message.from(serializedMessage);\n }\n\n if (version === 0) {\n return MessageV0.deserialize(serializedMessage);\n } else {\n throw new Error(\n `Transaction message version ${version} deserialization is not supported`,\n );\n }\n },\n};\n","import bs58 from 'bs58';\nimport {Buffer} from 'buffer';\n\nimport {PACKET_DATA_SIZE, SIGNATURE_LENGTH_IN_BYTES} from './constants';\nimport {Connection} from '../connection';\nimport {Message} from '../message';\nimport {PublicKey} from '../publickey';\nimport * as shortvec from '../utils/shortvec-encoding';\nimport {toBuffer} from '../utils/to-buffer';\nimport invariant from '../utils/assert';\nimport type {Signer} from '../keypair';\nimport type {Blockhash} from '../blockhash';\nimport type {CompiledInstruction} from '../message';\nimport {sign, verify} from '../utils/ed25519';\nimport {guardedSplice} from '../utils/guarded-array-utils';\n\n/** @internal */\ntype MessageSignednessErrors = {\n invalid?: PublicKey[];\n missing?: PublicKey[];\n};\n\n/**\n * Transaction signature as base-58 encoded string\n */\nexport type TransactionSignature = string;\n\nexport const enum TransactionStatus {\n BLOCKHEIGHT_EXCEEDED,\n PROCESSED,\n TIMED_OUT,\n NONCE_INVALID,\n}\n\n/**\n * Default (empty) signature\n */\nconst DEFAULT_SIGNATURE = Buffer.alloc(SIGNATURE_LENGTH_IN_BYTES).fill(0);\n\n/**\n * Account metadata used to define instructions\n */\nexport type AccountMeta = {\n /** An account's public key */\n pubkey: PublicKey;\n /** True if an instruction requires a transaction signature matching `pubkey` */\n isSigner: boolean;\n /** True if the `pubkey` can be loaded as a read-write account. */\n isWritable: boolean;\n};\n\n/**\n * List of TransactionInstruction object fields that may be initialized at construction\n */\nexport type TransactionInstructionCtorFields = {\n keys: Array;\n programId: PublicKey;\n data?: Buffer;\n};\n\n/**\n * Configuration object for Transaction.serialize()\n */\nexport type SerializeConfig = {\n /** Require all transaction signatures be present (default: true) */\n requireAllSignatures?: boolean;\n /** Verify provided signatures (default: true) */\n verifySignatures?: boolean;\n};\n\n/**\n * @internal\n */\nexport interface TransactionInstructionJSON {\n keys: {\n pubkey: string;\n isSigner: boolean;\n isWritable: boolean;\n }[];\n programId: string;\n data: number[];\n}\n\n/**\n * Transaction Instruction class\n */\nexport class TransactionInstruction {\n /**\n * Public keys to include in this transaction\n * Boolean represents whether this pubkey needs to sign the transaction\n */\n keys: Array;\n\n /**\n * Program Id to execute\n */\n programId: PublicKey;\n\n /**\n * Program input\n */\n data: Buffer = Buffer.alloc(0);\n\n constructor(opts: TransactionInstructionCtorFields) {\n this.programId = opts.programId;\n this.keys = opts.keys;\n if (opts.data) {\n this.data = opts.data;\n }\n }\n\n /**\n * @internal\n */\n toJSON(): TransactionInstructionJSON {\n return {\n keys: this.keys.map(({pubkey, isSigner, isWritable}) => ({\n pubkey: pubkey.toJSON(),\n isSigner,\n isWritable,\n })),\n programId: this.programId.toJSON(),\n data: [...this.data],\n };\n }\n}\n\n/**\n * Pair of signature and corresponding public key\n */\nexport type SignaturePubkeyPair = {\n signature: Buffer | null;\n publicKey: PublicKey;\n};\n\n/**\n * List of Transaction object fields that may be initialized at construction\n */\nexport type TransactionCtorFields_DEPRECATED = {\n /** Optional nonce information used for offline nonce'd transactions */\n nonceInfo?: NonceInformation | null;\n /** The transaction fee payer */\n feePayer?: PublicKey | null;\n /** One or more signatures */\n signatures?: Array;\n /** A recent blockhash */\n recentBlockhash?: Blockhash;\n};\n\n// For backward compatibility; an unfortunate consequence of being\n// forced to over-export types by the documentation generator.\n// See https://github.com/solana-labs/solana/pull/25820\nexport type TransactionCtorFields = TransactionCtorFields_DEPRECATED;\n\n/**\n * Blockhash-based transactions have a lifetime that are defined by\n * the blockhash they include. Any transaction whose blockhash is\n * too old will be rejected.\n */\nexport type TransactionBlockhashCtor = {\n /** The transaction fee payer */\n feePayer?: PublicKey | null;\n /** One or more signatures */\n signatures?: Array;\n /** A recent blockhash */\n blockhash: Blockhash;\n /** the last block chain can advance to before tx is declared expired */\n lastValidBlockHeight: number;\n};\n\n/**\n * Use these options to construct a durable nonce transaction.\n */\nexport type TransactionNonceCtor = {\n /** The transaction fee payer */\n feePayer?: PublicKey | null;\n minContextSlot: number;\n nonceInfo: NonceInformation;\n /** One or more signatures */\n signatures?: Array;\n};\n\n/**\n * Nonce information to be used to build an offline Transaction.\n */\nexport type NonceInformation = {\n /** The current blockhash stored in the nonce */\n nonce: Blockhash;\n /** AdvanceNonceAccount Instruction */\n nonceInstruction: TransactionInstruction;\n};\n\n/**\n * @internal\n */\nexport interface TransactionJSON {\n recentBlockhash: string | null;\n feePayer: string | null;\n nonceInfo: {\n nonce: string;\n nonceInstruction: TransactionInstructionJSON;\n } | null;\n instructions: TransactionInstructionJSON[];\n signers: string[];\n}\n\n/**\n * Transaction class\n */\nexport class Transaction {\n /**\n * Signatures for the transaction. Typically created by invoking the\n * `sign()` method\n */\n signatures: Array = [];\n\n /**\n * The first (payer) Transaction signature\n *\n * @returns {Buffer | null} Buffer of payer's signature\n */\n get signature(): Buffer | null {\n if (this.signatures.length > 0) {\n return this.signatures[0].signature;\n }\n return null;\n }\n\n /**\n * The transaction fee payer\n */\n feePayer?: PublicKey;\n\n /**\n * The instructions to atomically execute\n */\n instructions: Array = [];\n\n /**\n * A recent transaction id. Must be populated by the caller\n */\n recentBlockhash?: Blockhash;\n\n /**\n * the last block chain can advance to before tx is declared expired\n * */\n lastValidBlockHeight?: number;\n\n /**\n * Optional Nonce information. If populated, transaction will use a durable\n * Nonce hash instead of a recentBlockhash. Must be populated by the caller\n */\n nonceInfo?: NonceInformation;\n\n /**\n * If this is a nonce transaction this represents the minimum slot from which\n * to evaluate if the nonce has advanced when attempting to confirm the\n * transaction. This protects against a case where the transaction confirmation\n * logic loads the nonce account from an old slot and assumes the mismatch in\n * nonce value implies that the nonce has been advanced.\n */\n minNonceContextSlot?: number;\n\n /**\n * @internal\n */\n _message?: Message;\n\n /**\n * @internal\n */\n _json?: TransactionJSON;\n\n // Construct a transaction with a blockhash and lastValidBlockHeight\n constructor(opts?: TransactionBlockhashCtor);\n\n // Construct a transaction using a durable nonce\n constructor(opts?: TransactionNonceCtor);\n\n /**\n * @deprecated `TransactionCtorFields` has been deprecated and will be removed in a future version.\n * Please supply a `TransactionBlockhashCtor` instead.\n */\n constructor(opts?: TransactionCtorFields_DEPRECATED);\n\n /**\n * Construct an empty Transaction\n */\n constructor(\n opts?:\n | TransactionBlockhashCtor\n | TransactionNonceCtor\n | TransactionCtorFields_DEPRECATED,\n ) {\n if (!opts) {\n return;\n }\n if (opts.feePayer) {\n this.feePayer = opts.feePayer;\n }\n if (opts.signatures) {\n this.signatures = opts.signatures;\n }\n if (Object.prototype.hasOwnProperty.call(opts, 'nonceInfo')) {\n const {minContextSlot, nonceInfo} = opts as TransactionNonceCtor;\n this.minNonceContextSlot = minContextSlot;\n this.nonceInfo = nonceInfo;\n } else if (\n Object.prototype.hasOwnProperty.call(opts, 'lastValidBlockHeight')\n ) {\n const {blockhash, lastValidBlockHeight} =\n opts as TransactionBlockhashCtor;\n this.recentBlockhash = blockhash;\n this.lastValidBlockHeight = lastValidBlockHeight;\n } else {\n const {recentBlockhash, nonceInfo} =\n opts as TransactionCtorFields_DEPRECATED;\n if (nonceInfo) {\n this.nonceInfo = nonceInfo;\n }\n this.recentBlockhash = recentBlockhash;\n }\n }\n\n /**\n * @internal\n */\n toJSON(): TransactionJSON {\n return {\n recentBlockhash: this.recentBlockhash || null,\n feePayer: this.feePayer ? this.feePayer.toJSON() : null,\n nonceInfo: this.nonceInfo\n ? {\n nonce: this.nonceInfo.nonce,\n nonceInstruction: this.nonceInfo.nonceInstruction.toJSON(),\n }\n : null,\n instructions: this.instructions.map(instruction => instruction.toJSON()),\n signers: this.signatures.map(({publicKey}) => {\n return publicKey.toJSON();\n }),\n };\n }\n\n /**\n * Add one or more instructions to this Transaction\n *\n * @param {Array< Transaction | TransactionInstruction | TransactionInstructionCtorFields >} items - Instructions to add to the Transaction\n */\n add(\n ...items: Array<\n Transaction | TransactionInstruction | TransactionInstructionCtorFields\n >\n ): Transaction {\n if (items.length === 0) {\n throw new Error('No instructions');\n }\n\n items.forEach((item: any) => {\n if ('instructions' in item) {\n this.instructions = this.instructions.concat(item.instructions);\n } else if ('data' in item && 'programId' in item && 'keys' in item) {\n this.instructions.push(item);\n } else {\n this.instructions.push(new TransactionInstruction(item));\n }\n });\n return this;\n }\n\n /**\n * Compile transaction data\n */\n compileMessage(): Message {\n if (\n this._message &&\n JSON.stringify(this.toJSON()) === JSON.stringify(this._json)\n ) {\n return this._message;\n }\n\n let recentBlockhash;\n let instructions: TransactionInstruction[];\n if (this.nonceInfo) {\n recentBlockhash = this.nonceInfo.nonce;\n if (this.instructions[0] != this.nonceInfo.nonceInstruction) {\n instructions = [this.nonceInfo.nonceInstruction, ...this.instructions];\n } else {\n instructions = this.instructions;\n }\n } else {\n recentBlockhash = this.recentBlockhash;\n instructions = this.instructions;\n }\n if (!recentBlockhash) {\n throw new Error('Transaction recentBlockhash required');\n }\n\n if (instructions.length < 1) {\n console.warn('No instructions provided');\n }\n\n let feePayer: PublicKey;\n if (this.feePayer) {\n feePayer = this.feePayer;\n } else if (this.signatures.length > 0 && this.signatures[0].publicKey) {\n // Use implicit fee payer\n feePayer = this.signatures[0].publicKey;\n } else {\n throw new Error('Transaction fee payer required');\n }\n\n for (let i = 0; i < instructions.length; i++) {\n if (instructions[i].programId === undefined) {\n throw new Error(\n `Transaction instruction index ${i} has undefined program id`,\n );\n }\n }\n\n const programIds: string[] = [];\n const accountMetas: AccountMeta[] = [];\n instructions.forEach(instruction => {\n instruction.keys.forEach(accountMeta => {\n accountMetas.push({...accountMeta});\n });\n\n const programId = instruction.programId.toString();\n if (!programIds.includes(programId)) {\n programIds.push(programId);\n }\n });\n\n // Append programID account metas\n programIds.forEach(programId => {\n accountMetas.push({\n pubkey: new PublicKey(programId),\n isSigner: false,\n isWritable: false,\n });\n });\n\n // Cull duplicate account metas\n const uniqueMetas: AccountMeta[] = [];\n accountMetas.forEach(accountMeta => {\n const pubkeyString = accountMeta.pubkey.toString();\n const uniqueIndex = uniqueMetas.findIndex(x => {\n return x.pubkey.toString() === pubkeyString;\n });\n if (uniqueIndex > -1) {\n uniqueMetas[uniqueIndex].isWritable =\n uniqueMetas[uniqueIndex].isWritable || accountMeta.isWritable;\n uniqueMetas[uniqueIndex].isSigner =\n uniqueMetas[uniqueIndex].isSigner || accountMeta.isSigner;\n } else {\n uniqueMetas.push(accountMeta);\n }\n });\n\n // Sort. Prioritizing first by signer, then by writable\n uniqueMetas.sort(function (x, y) {\n if (x.isSigner !== y.isSigner) {\n // Signers always come before non-signers\n return x.isSigner ? -1 : 1;\n }\n if (x.isWritable !== y.isWritable) {\n // Writable accounts always come before read-only accounts\n return x.isWritable ? -1 : 1;\n }\n // Otherwise, sort by pubkey, stringwise.\n const options = {\n localeMatcher: 'best fit',\n usage: 'sort',\n sensitivity: 'variant',\n ignorePunctuation: false,\n numeric: false,\n caseFirst: 'lower',\n } as Intl.CollatorOptions;\n return x.pubkey\n .toBase58()\n .localeCompare(y.pubkey.toBase58(), 'en', options);\n });\n\n // Move fee payer to the front\n const feePayerIndex = uniqueMetas.findIndex(x => {\n return x.pubkey.equals(feePayer);\n });\n if (feePayerIndex > -1) {\n const [payerMeta] = uniqueMetas.splice(feePayerIndex, 1);\n payerMeta.isSigner = true;\n payerMeta.isWritable = true;\n uniqueMetas.unshift(payerMeta);\n } else {\n uniqueMetas.unshift({\n pubkey: feePayer,\n isSigner: true,\n isWritable: true,\n });\n }\n\n // Disallow unknown signers\n for (const signature of this.signatures) {\n const uniqueIndex = uniqueMetas.findIndex(x => {\n return x.pubkey.equals(signature.publicKey);\n });\n if (uniqueIndex > -1) {\n if (!uniqueMetas[uniqueIndex].isSigner) {\n uniqueMetas[uniqueIndex].isSigner = true;\n console.warn(\n 'Transaction references a signature that is unnecessary, ' +\n 'only the fee payer and instruction signer accounts should sign a transaction. ' +\n 'This behavior is deprecated and will throw an error in the next major version release.',\n );\n }\n } else {\n throw new Error(`unknown signer: ${signature.publicKey.toString()}`);\n }\n }\n\n let numRequiredSignatures = 0;\n let numReadonlySignedAccounts = 0;\n let numReadonlyUnsignedAccounts = 0;\n\n // Split out signing from non-signing keys and count header values\n const signedKeys: string[] = [];\n const unsignedKeys: string[] = [];\n uniqueMetas.forEach(({pubkey, isSigner, isWritable}) => {\n if (isSigner) {\n signedKeys.push(pubkey.toString());\n numRequiredSignatures += 1;\n if (!isWritable) {\n numReadonlySignedAccounts += 1;\n }\n } else {\n unsignedKeys.push(pubkey.toString());\n if (!isWritable) {\n numReadonlyUnsignedAccounts += 1;\n }\n }\n });\n\n const accountKeys = signedKeys.concat(unsignedKeys);\n const compiledInstructions: CompiledInstruction[] = instructions.map(\n instruction => {\n const {data, programId} = instruction;\n return {\n programIdIndex: accountKeys.indexOf(programId.toString()),\n accounts: instruction.keys.map(meta =>\n accountKeys.indexOf(meta.pubkey.toString()),\n ),\n data: bs58.encode(data),\n };\n },\n );\n\n compiledInstructions.forEach(instruction => {\n invariant(instruction.programIdIndex >= 0);\n instruction.accounts.forEach(keyIndex => invariant(keyIndex >= 0));\n });\n\n return new Message({\n header: {\n numRequiredSignatures,\n numReadonlySignedAccounts,\n numReadonlyUnsignedAccounts,\n },\n accountKeys,\n recentBlockhash,\n instructions: compiledInstructions,\n });\n }\n\n /**\n * @internal\n */\n _compile(): Message {\n const message = this.compileMessage();\n const signedKeys = message.accountKeys.slice(\n 0,\n message.header.numRequiredSignatures,\n );\n\n if (this.signatures.length === signedKeys.length) {\n const valid = this.signatures.every((pair, index) => {\n return signedKeys[index].equals(pair.publicKey);\n });\n\n if (valid) return message;\n }\n\n this.signatures = signedKeys.map(publicKey => ({\n signature: null,\n publicKey,\n }));\n\n return message;\n }\n\n /**\n * Get a buffer of the Transaction data that need to be covered by signatures\n */\n serializeMessage(): Buffer {\n return this._compile().serialize();\n }\n\n /**\n * Get the estimated fee associated with a transaction\n *\n * @param {Connection} connection Connection to RPC Endpoint.\n *\n * @returns {Promise} The estimated fee for the transaction\n */\n async getEstimatedFee(connection: Connection): Promise {\n return (await connection.getFeeForMessage(this.compileMessage())).value;\n }\n\n /**\n * Specify the public keys which will be used to sign the Transaction.\n * The first signer will be used as the transaction fee payer account.\n *\n * Signatures can be added with either `partialSign` or `addSignature`\n *\n * @deprecated Deprecated since v0.84.0. Only the fee payer needs to be\n * specified and it can be set in the Transaction constructor or with the\n * `feePayer` property.\n */\n setSigners(...signers: Array) {\n if (signers.length === 0) {\n throw new Error('No signers');\n }\n\n const seen = new Set();\n this.signatures = signers\n .filter(publicKey => {\n const key = publicKey.toString();\n if (seen.has(key)) {\n return false;\n } else {\n seen.add(key);\n return true;\n }\n })\n .map(publicKey => ({signature: null, publicKey}));\n }\n\n /**\n * Sign the Transaction with the specified signers. Multiple signatures may\n * be applied to a Transaction. The first signature is considered \"primary\"\n * and is used identify and confirm transactions.\n *\n * If the Transaction `feePayer` is not set, the first signer will be used\n * as the transaction fee payer account.\n *\n * Transaction fields should not be modified after the first call to `sign`,\n * as doing so may invalidate the signature and cause the Transaction to be\n * rejected.\n *\n * The Transaction must be assigned a valid `recentBlockhash` before invoking this method\n *\n * @param {Array} signers Array of signers that will sign the transaction\n */\n sign(...signers: Array) {\n if (signers.length === 0) {\n throw new Error('No signers');\n }\n\n // Dedupe signers\n const seen = new Set();\n const uniqueSigners = [];\n for (const signer of signers) {\n const key = signer.publicKey.toString();\n if (seen.has(key)) {\n continue;\n } else {\n seen.add(key);\n uniqueSigners.push(signer);\n }\n }\n\n this.signatures = uniqueSigners.map(signer => ({\n signature: null,\n publicKey: signer.publicKey,\n }));\n\n const message = this._compile();\n this._partialSign(message, ...uniqueSigners);\n }\n\n /**\n * Partially sign a transaction with the specified accounts. All accounts must\n * correspond to either the fee payer or a signer account in the transaction\n * instructions.\n *\n * All the caveats from the `sign` method apply to `partialSign`\n *\n * @param {Array} signers Array of signers that will sign the transaction\n */\n partialSign(...signers: Array) {\n if (signers.length === 0) {\n throw new Error('No signers');\n }\n\n // Dedupe signers\n const seen = new Set();\n const uniqueSigners = [];\n for (const signer of signers) {\n const key = signer.publicKey.toString();\n if (seen.has(key)) {\n continue;\n } else {\n seen.add(key);\n uniqueSigners.push(signer);\n }\n }\n\n const message = this._compile();\n this._partialSign(message, ...uniqueSigners);\n }\n\n /**\n * @internal\n */\n _partialSign(message: Message, ...signers: Array) {\n const signData = message.serialize();\n signers.forEach(signer => {\n const signature = sign(signData, signer.secretKey);\n this._addSignature(signer.publicKey, toBuffer(signature));\n });\n }\n\n /**\n * Add an externally created signature to a transaction. The public key\n * must correspond to either the fee payer or a signer account in the transaction\n * instructions.\n *\n * @param {PublicKey} pubkey Public key that will be added to the transaction.\n * @param {Buffer} signature An externally created signature to add to the transaction.\n */\n addSignature(pubkey: PublicKey, signature: Buffer) {\n this._compile(); // Ensure signatures array is populated\n this._addSignature(pubkey, signature);\n }\n\n /**\n * @internal\n */\n _addSignature(pubkey: PublicKey, signature: Buffer) {\n invariant(signature.length === 64);\n\n const index = this.signatures.findIndex(sigpair =>\n pubkey.equals(sigpair.publicKey),\n );\n if (index < 0) {\n throw new Error(`unknown signer: ${pubkey.toString()}`);\n }\n\n this.signatures[index].signature = Buffer.from(signature);\n }\n\n /**\n * Verify signatures of a Transaction\n * Optional parameter specifies if we're expecting a fully signed Transaction or a partially signed one.\n * If no boolean is provided, we expect a fully signed Transaction by default.\n *\n * @param {boolean} [requireAllSignatures=true] Require a fully signed Transaction\n */\n verifySignatures(requireAllSignatures: boolean = true): boolean {\n const signatureErrors = this._getMessageSignednessErrors(\n this.serializeMessage(),\n requireAllSignatures,\n );\n return !signatureErrors;\n }\n\n /**\n * @internal\n */\n _getMessageSignednessErrors(\n message: Uint8Array,\n requireAllSignatures: boolean,\n ): MessageSignednessErrors | undefined {\n const errors: MessageSignednessErrors = {};\n for (const {signature, publicKey} of this.signatures) {\n if (signature === null) {\n if (requireAllSignatures) {\n (errors.missing ||= []).push(publicKey);\n }\n } else {\n if (!verify(signature, message, publicKey.toBytes())) {\n (errors.invalid ||= []).push(publicKey);\n }\n }\n }\n return errors.invalid || errors.missing ? errors : undefined;\n }\n\n /**\n * Serialize the Transaction in the wire format.\n *\n * @param {Buffer} [config] Config of transaction.\n *\n * @returns {Buffer} Signature of transaction in wire format.\n */\n serialize(config?: SerializeConfig): Buffer {\n const {requireAllSignatures, verifySignatures} = Object.assign(\n {requireAllSignatures: true, verifySignatures: true},\n config,\n );\n\n const signData = this.serializeMessage();\n if (verifySignatures) {\n const sigErrors = this._getMessageSignednessErrors(\n signData,\n requireAllSignatures,\n );\n if (sigErrors) {\n let errorMessage = 'Signature verification failed.';\n if (sigErrors.invalid) {\n errorMessage += `\\nInvalid signature for public key${\n sigErrors.invalid.length === 1 ? '' : '(s)'\n } [\\`${sigErrors.invalid.map(p => p.toBase58()).join('`, `')}\\`].`;\n }\n if (sigErrors.missing) {\n errorMessage += `\\nMissing signature for public key${\n sigErrors.missing.length === 1 ? '' : '(s)'\n } [\\`${sigErrors.missing.map(p => p.toBase58()).join('`, `')}\\`].`;\n }\n throw new Error(errorMessage);\n }\n }\n\n return this._serialize(signData);\n }\n\n /**\n * @internal\n */\n _serialize(signData: Buffer): Buffer {\n const {signatures} = this;\n const signatureCount: number[] = [];\n shortvec.encodeLength(signatureCount, signatures.length);\n const transactionLength =\n signatureCount.length + signatures.length * 64 + signData.length;\n const wireTransaction = Buffer.alloc(transactionLength);\n invariant(signatures.length < 256);\n Buffer.from(signatureCount).copy(wireTransaction, 0);\n signatures.forEach(({signature}, index) => {\n if (signature !== null) {\n invariant(signature.length === 64, `signature has invalid length`);\n Buffer.from(signature).copy(\n wireTransaction,\n signatureCount.length + index * 64,\n );\n }\n });\n signData.copy(\n wireTransaction,\n signatureCount.length + signatures.length * 64,\n );\n invariant(\n wireTransaction.length <= PACKET_DATA_SIZE,\n `Transaction too large: ${wireTransaction.length} > ${PACKET_DATA_SIZE}`,\n );\n return wireTransaction;\n }\n\n /**\n * Deprecated method\n * @internal\n */\n get keys(): Array {\n invariant(this.instructions.length === 1);\n return this.instructions[0].keys.map(keyObj => keyObj.pubkey);\n }\n\n /**\n * Deprecated method\n * @internal\n */\n get programId(): PublicKey {\n invariant(this.instructions.length === 1);\n return this.instructions[0].programId;\n }\n\n /**\n * Deprecated method\n * @internal\n */\n get data(): Buffer {\n invariant(this.instructions.length === 1);\n return this.instructions[0].data;\n }\n\n /**\n * Parse a wire transaction into a Transaction object.\n *\n * @param {Buffer | Uint8Array | Array} buffer Signature of wire Transaction\n *\n * @returns {Transaction} Transaction associated with the signature\n */\n static from(buffer: Buffer | Uint8Array | Array): Transaction {\n // Slice up wire data\n let byteArray = [...buffer];\n\n const signatureCount = shortvec.decodeLength(byteArray);\n let signatures = [];\n for (let i = 0; i < signatureCount; i++) {\n const signature = guardedSplice(byteArray, 0, SIGNATURE_LENGTH_IN_BYTES);\n signatures.push(bs58.encode(Buffer.from(signature)));\n }\n\n return Transaction.populate(Message.from(byteArray), signatures);\n }\n\n /**\n * Populate Transaction object from message and signatures\n *\n * @param {Message} message Message of transaction\n * @param {Array} signatures List of signatures to assign to the transaction\n *\n * @returns {Transaction} The populated Transaction\n */\n static populate(\n message: Message,\n signatures: Array = [],\n ): Transaction {\n const transaction = new Transaction();\n transaction.recentBlockhash = message.recentBlockhash;\n if (message.header.numRequiredSignatures > 0) {\n transaction.feePayer = message.accountKeys[0];\n }\n signatures.forEach((signature, index) => {\n const sigPubkeyPair = {\n signature:\n signature == bs58.encode(DEFAULT_SIGNATURE)\n ? null\n : bs58.decode(signature),\n publicKey: message.accountKeys[index],\n };\n transaction.signatures.push(sigPubkeyPair);\n });\n\n message.instructions.forEach(instruction => {\n const keys = instruction.accounts.map(account => {\n const pubkey = message.accountKeys[account];\n return {\n pubkey,\n isSigner:\n transaction.signatures.some(\n keyObj => keyObj.publicKey.toString() === pubkey.toString(),\n ) || message.isAccountSigner(account),\n isWritable: message.isAccountWritable(account),\n };\n });\n\n transaction.instructions.push(\n new TransactionInstruction({\n keys,\n programId: message.accountKeys[instruction.programIdIndex],\n data: bs58.decode(instruction.data),\n }),\n );\n });\n\n transaction._message = message;\n transaction._json = transaction.toJSON();\n\n return transaction;\n }\n}\n","import {AccountKeysFromLookups} from '../message/account-keys';\nimport assert from '../utils/assert';\nimport {toBuffer} from '../utils/to-buffer';\nimport {Blockhash} from '../blockhash';\nimport {Message, MessageV0, VersionedMessage} from '../message';\nimport {PublicKey} from '../publickey';\nimport {AddressLookupTableAccount} from '../programs';\nimport {AccountMeta, TransactionInstruction} from './legacy';\n\nexport type TransactionMessageArgs = {\n payerKey: PublicKey;\n instructions: Array;\n recentBlockhash: Blockhash;\n};\n\nexport type DecompileArgs =\n | {\n accountKeysFromLookups: AccountKeysFromLookups;\n }\n | {\n addressLookupTableAccounts: AddressLookupTableAccount[];\n };\n\nexport class TransactionMessage {\n payerKey: PublicKey;\n instructions: Array;\n recentBlockhash: Blockhash;\n\n constructor(args: TransactionMessageArgs) {\n this.payerKey = args.payerKey;\n this.instructions = args.instructions;\n this.recentBlockhash = args.recentBlockhash;\n }\n\n static decompile(\n message: VersionedMessage,\n args?: DecompileArgs,\n ): TransactionMessage {\n const {header, compiledInstructions, recentBlockhash} = message;\n\n const {\n numRequiredSignatures,\n numReadonlySignedAccounts,\n numReadonlyUnsignedAccounts,\n } = header;\n\n const numWritableSignedAccounts =\n numRequiredSignatures - numReadonlySignedAccounts;\n assert(numWritableSignedAccounts > 0, 'Message header is invalid');\n\n const numWritableUnsignedAccounts =\n message.staticAccountKeys.length -\n numRequiredSignatures -\n numReadonlyUnsignedAccounts;\n assert(numWritableUnsignedAccounts >= 0, 'Message header is invalid');\n\n const accountKeys = message.getAccountKeys(args);\n const payerKey = accountKeys.get(0);\n if (payerKey === undefined) {\n throw new Error(\n 'Failed to decompile message because no account keys were found',\n );\n }\n\n const instructions: TransactionInstruction[] = [];\n for (const compiledIx of compiledInstructions) {\n const keys: AccountMeta[] = [];\n\n for (const keyIndex of compiledIx.accountKeyIndexes) {\n const pubkey = accountKeys.get(keyIndex);\n if (pubkey === undefined) {\n throw new Error(\n `Failed to find key for account key index ${keyIndex}`,\n );\n }\n\n const isSigner = keyIndex < numRequiredSignatures;\n\n let isWritable;\n if (isSigner) {\n isWritable = keyIndex < numWritableSignedAccounts;\n } else if (keyIndex < accountKeys.staticAccountKeys.length) {\n isWritable =\n keyIndex - numRequiredSignatures < numWritableUnsignedAccounts;\n } else {\n isWritable =\n keyIndex - accountKeys.staticAccountKeys.length <\n // accountKeysFromLookups cannot be undefined because we already found a pubkey for this index above\n accountKeys.accountKeysFromLookups!.writable.length;\n }\n\n keys.push({\n pubkey,\n isSigner: keyIndex < header.numRequiredSignatures,\n isWritable,\n });\n }\n\n const programId = accountKeys.get(compiledIx.programIdIndex);\n if (programId === undefined) {\n throw new Error(\n `Failed to find program id for program id index ${compiledIx.programIdIndex}`,\n );\n }\n\n instructions.push(\n new TransactionInstruction({\n programId,\n data: toBuffer(compiledIx.data),\n keys,\n }),\n );\n }\n\n return new TransactionMessage({\n payerKey,\n instructions,\n recentBlockhash,\n });\n }\n\n compileToLegacyMessage(): Message {\n return Message.compile({\n payerKey: this.payerKey,\n recentBlockhash: this.recentBlockhash,\n instructions: this.instructions,\n });\n }\n\n compileToV0Message(\n addressLookupTableAccounts?: AddressLookupTableAccount[],\n ): MessageV0 {\n return MessageV0.compile({\n payerKey: this.payerKey,\n recentBlockhash: this.recentBlockhash,\n instructions: this.instructions,\n addressLookupTableAccounts,\n });\n }\n}\n","import * as BufferLayout from '@solana/buffer-layout';\n\nimport {Signer} from '../keypair';\nimport assert from '../utils/assert';\nimport {VersionedMessage} from '../message/versioned';\nimport {SIGNATURE_LENGTH_IN_BYTES} from './constants';\nimport * as shortvec from '../utils/shortvec-encoding';\nimport * as Layout from '../layout';\nimport {sign} from '../utils/ed25519';\nimport {PublicKey} from '../publickey';\nimport {guardedSplice} from '../utils/guarded-array-utils';\n\nexport type TransactionVersion = 'legacy' | 0;\n\n/**\n * Versioned transaction class\n */\nexport class VersionedTransaction {\n signatures: Array;\n message: VersionedMessage;\n\n get version(): TransactionVersion {\n return this.message.version;\n }\n\n constructor(message: VersionedMessage, signatures?: Array) {\n if (signatures !== undefined) {\n assert(\n signatures.length === message.header.numRequiredSignatures,\n 'Expected signatures length to be equal to the number of required signatures',\n );\n this.signatures = signatures;\n } else {\n const defaultSignatures = [];\n for (let i = 0; i < message.header.numRequiredSignatures; i++) {\n defaultSignatures.push(new Uint8Array(SIGNATURE_LENGTH_IN_BYTES));\n }\n this.signatures = defaultSignatures;\n }\n this.message = message;\n }\n\n serialize(): Uint8Array {\n const serializedMessage = this.message.serialize();\n\n const encodedSignaturesLength = Array();\n shortvec.encodeLength(encodedSignaturesLength, this.signatures.length);\n\n const transactionLayout = BufferLayout.struct<{\n encodedSignaturesLength: Uint8Array;\n signatures: Array;\n serializedMessage: Uint8Array;\n }>([\n BufferLayout.blob(\n encodedSignaturesLength.length,\n 'encodedSignaturesLength',\n ),\n BufferLayout.seq(\n Layout.signature(),\n this.signatures.length,\n 'signatures',\n ),\n BufferLayout.blob(serializedMessage.length, 'serializedMessage'),\n ]);\n\n const serializedTransaction = new Uint8Array(2048);\n const serializedTransactionLength = transactionLayout.encode(\n {\n encodedSignaturesLength: new Uint8Array(encodedSignaturesLength),\n signatures: this.signatures,\n serializedMessage,\n },\n serializedTransaction,\n );\n\n return serializedTransaction.slice(0, serializedTransactionLength);\n }\n\n static deserialize(serializedTransaction: Uint8Array): VersionedTransaction {\n let byteArray = [...serializedTransaction];\n\n const signatures = [];\n const signaturesLength = shortvec.decodeLength(byteArray);\n for (let i = 0; i < signaturesLength; i++) {\n signatures.push(\n new Uint8Array(guardedSplice(byteArray, 0, SIGNATURE_LENGTH_IN_BYTES)),\n );\n }\n\n const message = VersionedMessage.deserialize(new Uint8Array(byteArray));\n return new VersionedTransaction(message, signatures);\n }\n\n sign(signers: Array) {\n const messageData = this.message.serialize();\n const signerPubkeys = this.message.staticAccountKeys.slice(\n 0,\n this.message.header.numRequiredSignatures,\n );\n for (const signer of signers) {\n const signerIndex = signerPubkeys.findIndex(pubkey =>\n pubkey.equals(signer.publicKey),\n );\n assert(\n signerIndex >= 0,\n `Cannot sign with non signer key ${signer.publicKey.toBase58()}`,\n );\n this.signatures[signerIndex] = sign(messageData, signer.secretKey);\n }\n }\n\n addSignature(publicKey: PublicKey, signature: Uint8Array) {\n assert(signature.byteLength === 64, 'Signature must be 64 bytes long');\n const signerPubkeys = this.message.staticAccountKeys.slice(\n 0,\n this.message.header.numRequiredSignatures,\n );\n const signerIndex = signerPubkeys.findIndex(pubkey =>\n pubkey.equals(publicKey),\n );\n assert(\n signerIndex >= 0,\n `Can not add signature; \\`${publicKey.toBase58()}\\` is not required to sign this transaction`,\n );\n this.signatures[signerIndex] = signature;\n }\n}\n","// TODO: These constants should be removed in favor of reading them out of a\n// Syscall account\n\n/**\n * @internal\n */\nexport const NUM_TICKS_PER_SECOND = 160;\n\n/**\n * @internal\n */\nexport const DEFAULT_TICKS_PER_SLOT = 64;\n\n/**\n * @internal\n */\nexport const NUM_SLOTS_PER_SECOND =\n NUM_TICKS_PER_SECOND / DEFAULT_TICKS_PER_SLOT;\n\n/**\n * @internal\n */\nexport const MS_PER_SLOT = 1000 / NUM_SLOTS_PER_SECOND;\n","import {PublicKey} from './publickey';\n\nexport const SYSVAR_CLOCK_PUBKEY = new PublicKey(\n 'SysvarC1ock11111111111111111111111111111111',\n);\n\nexport const SYSVAR_EPOCH_SCHEDULE_PUBKEY = new PublicKey(\n 'SysvarEpochSchedu1e111111111111111111111111',\n);\n\nexport const SYSVAR_INSTRUCTIONS_PUBKEY = new PublicKey(\n 'Sysvar1nstructions1111111111111111111111111',\n);\n\nexport const SYSVAR_RECENT_BLOCKHASHES_PUBKEY = new PublicKey(\n 'SysvarRecentB1ockHashes11111111111111111111',\n);\n\nexport const SYSVAR_RENT_PUBKEY = new PublicKey(\n 'SysvarRent111111111111111111111111111111111',\n);\n\nexport const SYSVAR_REWARDS_PUBKEY = new PublicKey(\n 'SysvarRewards111111111111111111111111111111',\n);\n\nexport const SYSVAR_SLOT_HASHES_PUBKEY = new PublicKey(\n 'SysvarS1otHashes111111111111111111111111111',\n);\n\nexport const SYSVAR_SLOT_HISTORY_PUBKEY = new PublicKey(\n 'SysvarS1otHistory11111111111111111111111111',\n);\n\nexport const SYSVAR_STAKE_HISTORY_PUBKEY = new PublicKey(\n 'SysvarStakeHistory1111111111111111111111111',\n);\n","import {Connection} from './connection';\nimport {TransactionSignature} from './transaction';\n\nexport class SendTransactionError extends Error {\n private signature: TransactionSignature;\n private transactionMessage: string;\n private transactionLogs: string[] | Promise | undefined;\n\n constructor({\n action,\n signature,\n transactionMessage,\n logs,\n }: {\n action: 'send' | 'simulate';\n signature: TransactionSignature;\n transactionMessage: string;\n logs?: string[];\n }) {\n const maybeLogsOutput = logs\n ? `Logs: \\n${JSON.stringify(logs.slice(-10), null, 2)}. `\n : '';\n const guideText =\n '\\nCatch the `SendTransactionError` and call `getLogs()` on it for full details.';\n let message: string;\n switch (action) {\n case 'send':\n message =\n `Transaction ${signature} resulted in an error. \\n` +\n `${transactionMessage}. ` +\n maybeLogsOutput +\n guideText;\n break;\n case 'simulate':\n message =\n `Simulation failed. \\nMessage: ${transactionMessage}. \\n` +\n maybeLogsOutput +\n guideText;\n break;\n default: {\n message = `Unknown action '${((a: never) => a)(action)}'`;\n }\n }\n super(message);\n\n this.signature = signature;\n this.transactionMessage = transactionMessage;\n this.transactionLogs = logs ? logs : undefined;\n }\n\n get transactionError(): {message: string; logs?: string[]} {\n return {\n message: this.transactionMessage,\n logs: Array.isArray(this.transactionLogs)\n ? this.transactionLogs\n : undefined,\n };\n }\n\n /* @deprecated Use `await getLogs()` instead */\n get logs(): string[] | undefined {\n const cachedLogs = this.transactionLogs;\n if (\n cachedLogs != null &&\n typeof cachedLogs === 'object' &&\n 'then' in cachedLogs\n ) {\n return undefined;\n }\n return cachedLogs;\n }\n\n async getLogs(connection: Connection): Promise {\n if (!Array.isArray(this.transactionLogs)) {\n this.transactionLogs = new Promise((resolve, reject) => {\n connection\n .getTransaction(this.signature)\n .then(tx => {\n if (tx && tx.meta && tx.meta.logMessages) {\n const logs = tx.meta.logMessages;\n this.transactionLogs = logs;\n resolve(logs);\n } else {\n reject(new Error('Log messages not found'));\n }\n })\n .catch(reject);\n });\n }\n return await this.transactionLogs;\n }\n}\n\n// Keep in sync with client/src/rpc_custom_errors.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJSONRPCErrorCode = {\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n} as const;\nexport type SolanaJSONRPCErrorCodeEnum =\n (typeof SolanaJSONRPCErrorCode)[keyof typeof SolanaJSONRPCErrorCode];\n\nexport class SolanaJSONRPCError extends Error {\n code: SolanaJSONRPCErrorCodeEnum | unknown;\n data?: any;\n constructor(\n {\n code,\n message,\n data,\n }: Readonly<{code: unknown; message: string; data?: any}>,\n customMessage?: string,\n ) {\n super(customMessage != null ? `${customMessage}: ${message}` : message);\n this.code = code;\n this.data = data;\n this.name = 'SolanaJSONRPCError';\n }\n}\n","import {Connection, SignatureResult} from '../connection';\nimport {Transaction} from '../transaction';\nimport type {ConfirmOptions} from '../connection';\nimport type {Signer} from '../keypair';\nimport type {TransactionSignature} from '../transaction';\nimport {SendTransactionError} from '../errors';\n\n/**\n * Sign, send and confirm a transaction.\n *\n * If `commitment` option is not specified, defaults to 'max' commitment.\n *\n * @param {Connection} connection\n * @param {Transaction} transaction\n * @param {Array} signers\n * @param {ConfirmOptions} [options]\n * @returns {Promise}\n */\nexport async function sendAndConfirmTransaction(\n connection: Connection,\n transaction: Transaction,\n signers: Array,\n options?: ConfirmOptions &\n Readonly<{\n // A signal that, when aborted, cancels any outstanding transaction confirmation operations\n abortSignal?: AbortSignal;\n }>,\n): Promise {\n const sendOptions = options && {\n skipPreflight: options.skipPreflight,\n preflightCommitment: options.preflightCommitment || options.commitment,\n maxRetries: options.maxRetries,\n minContextSlot: options.minContextSlot,\n };\n\n const signature = await connection.sendTransaction(\n transaction,\n signers,\n sendOptions,\n );\n\n let status: SignatureResult;\n if (\n transaction.recentBlockhash != null &&\n transaction.lastValidBlockHeight != null\n ) {\n status = (\n await connection.confirmTransaction(\n {\n abortSignal: options?.abortSignal,\n signature: signature,\n blockhash: transaction.recentBlockhash,\n lastValidBlockHeight: transaction.lastValidBlockHeight,\n },\n options && options.commitment,\n )\n ).value;\n } else if (\n transaction.minNonceContextSlot != null &&\n transaction.nonceInfo != null\n ) {\n const {nonceInstruction} = transaction.nonceInfo;\n const nonceAccountPubkey = nonceInstruction.keys[0].pubkey;\n status = (\n await connection.confirmTransaction(\n {\n abortSignal: options?.abortSignal,\n minContextSlot: transaction.minNonceContextSlot,\n nonceAccountPubkey,\n nonceValue: transaction.nonceInfo.nonce,\n signature,\n },\n options && options.commitment,\n )\n ).value;\n } else {\n if (options?.abortSignal != null) {\n console.warn(\n 'sendAndConfirmTransaction(): A transaction with a deprecated confirmation strategy was ' +\n 'supplied along with an `abortSignal`. Only transactions having `lastValidBlockHeight` ' +\n 'or a combination of `nonceInfo` and `minNonceContextSlot` are abortable.',\n );\n }\n status = (\n await connection.confirmTransaction(\n signature,\n options && options.commitment,\n )\n ).value;\n }\n\n if (status.err) {\n if (signature != null) {\n throw new SendTransactionError({\n action: 'send',\n signature: signature,\n transactionMessage: `Status: (${JSON.stringify(status)})`,\n });\n }\n throw new Error(\n `Transaction ${signature} failed (${JSON.stringify(status)})`,\n );\n }\n\n return signature;\n}\n","// zzz\nexport function sleep(ms: number): Promise {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n","import {Buffer} from 'buffer';\nimport * as BufferLayout from '@solana/buffer-layout';\n\nimport * as Layout from './layout';\n\nexport interface IInstructionInputData {\n readonly instruction: number;\n}\n\n/**\n * @internal\n */\nexport type InstructionType = {\n /** The Instruction index (from solana upstream program) */\n index: number;\n /** The BufferLayout to use to build data */\n layout: BufferLayout.Layout;\n};\n\n/**\n * Populate a buffer of instruction data using an InstructionType\n * @internal\n */\nexport function encodeData(\n type: InstructionType,\n fields?: any,\n): Buffer {\n const allocLength =\n type.layout.span >= 0 ? type.layout.span : Layout.getAlloc(type, fields);\n const data = Buffer.alloc(allocLength);\n const layoutFields = Object.assign({instruction: type.index}, fields);\n type.layout.encode(layoutFields, data);\n return data;\n}\n\n/**\n * Decode instruction data buffer using an InstructionType\n * @internal\n */\nexport function decodeData(\n type: InstructionType,\n buffer: Buffer,\n): TInputData {\n let data: TInputData;\n try {\n data = type.layout.decode(buffer);\n } catch (err) {\n throw new Error('invalid instruction; ' + err);\n }\n\n if (data.instruction !== type.index) {\n throw new Error(\n `invalid instruction; instruction index mismatch ${data.instruction} != ${type.index}`,\n );\n }\n\n return data;\n}\n","import * as BufferLayout from '@solana/buffer-layout';\n\n/**\n * https://github.com/solana-labs/solana/blob/90bedd7e067b5b8f3ddbb45da00a4e9cabb22c62/sdk/src/fee_calculator.rs#L7-L11\n *\n * @internal\n */\nexport const FeeCalculatorLayout = BufferLayout.nu64('lamportsPerSignature');\n\n/**\n * Calculator for transaction fees.\n *\n * @deprecated Deprecated since Solana v1.8.0.\n */\nexport interface FeeCalculator {\n /** Cost in lamports to validate a signature. */\n lamportsPerSignature: number;\n}\n","import * as BufferLayout from '@solana/buffer-layout';\nimport {Buffer} from 'buffer';\n\nimport * as Layout from './layout';\nimport {PublicKey} from './publickey';\nimport type {FeeCalculator} from './fee-calculator';\nimport {FeeCalculatorLayout} from './fee-calculator';\nimport {toBuffer} from './utils/to-buffer';\n\n/**\n * See https://github.com/solana-labs/solana/blob/0ea2843ec9cdc517572b8e62c959f41b55cf4453/sdk/src/nonce_state.rs#L29-L32\n *\n * @internal\n */\nconst NonceAccountLayout = BufferLayout.struct<\n Readonly<{\n authorizedPubkey: Uint8Array;\n feeCalculator: Readonly<{\n lamportsPerSignature: number;\n }>;\n nonce: Uint8Array;\n state: number;\n version: number;\n }>\n>([\n BufferLayout.u32('version'),\n BufferLayout.u32('state'),\n Layout.publicKey('authorizedPubkey'),\n Layout.publicKey('nonce'),\n BufferLayout.struct>(\n [FeeCalculatorLayout],\n 'feeCalculator',\n ),\n]);\n\nexport const NONCE_ACCOUNT_LENGTH = NonceAccountLayout.span;\n\n/**\n * A durable nonce is a 32 byte value encoded as a base58 string.\n */\nexport type DurableNonce = string;\n\ntype NonceAccountArgs = {\n authorizedPubkey: PublicKey;\n nonce: DurableNonce;\n feeCalculator: FeeCalculator;\n};\n\n/**\n * NonceAccount class\n */\nexport class NonceAccount {\n authorizedPubkey: PublicKey;\n nonce: DurableNonce;\n feeCalculator: FeeCalculator;\n\n /**\n * @internal\n */\n constructor(args: NonceAccountArgs) {\n this.authorizedPubkey = args.authorizedPubkey;\n this.nonce = args.nonce;\n this.feeCalculator = args.feeCalculator;\n }\n\n /**\n * Deserialize NonceAccount from the account data.\n *\n * @param buffer account data\n * @return NonceAccount\n */\n static fromAccountData(\n buffer: Buffer | Uint8Array | Array,\n ): NonceAccount {\n const nonceAccount = NonceAccountLayout.decode(toBuffer(buffer), 0);\n return new NonceAccount({\n authorizedPubkey: new PublicKey(nonceAccount.authorizedPubkey),\n nonce: new PublicKey(nonceAccount.nonce).toString(),\n feeCalculator: nonceAccount.feeCalculator,\n });\n }\n}\n","// src/codes.ts\nvar SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED = 1;\nvar SOLANA_ERROR__INVALID_NONCE = 2;\nvar SOLANA_ERROR__NONCE_ACCOUNT_NOT_FOUND = 3;\nvar SOLANA_ERROR__BLOCKHASH_STRING_LENGTH_OUT_OF_RANGE = 4;\nvar SOLANA_ERROR__INVALID_BLOCKHASH_BYTE_LENGTH = 5;\nvar SOLANA_ERROR__LAMPORTS_OUT_OF_RANGE = 6;\nvar SOLANA_ERROR__MALFORMED_BIGINT_STRING = 7;\nvar SOLANA_ERROR__MALFORMED_NUMBER_STRING = 8;\nvar SOLANA_ERROR__TIMESTAMP_OUT_OF_RANGE = 9;\nvar SOLANA_ERROR__MALFORMED_JSON_RPC_ERROR = 10;\nvar SOLANA_ERROR__JSON_RPC__PARSE_ERROR = -32700;\nvar SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR = -32603;\nvar SOLANA_ERROR__JSON_RPC__INVALID_PARAMS = -32602;\nvar SOLANA_ERROR__JSON_RPC__METHOD_NOT_FOUND = -32601;\nvar SOLANA_ERROR__JSON_RPC__INVALID_REQUEST = -32600;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED = -32016;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION = -32015;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET = -32014;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH = -32013;\nvar SOLANA_ERROR__JSON_RPC__SCAN_ERROR = -32012;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE = -32011;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX = -32010;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED = -32009;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NO_SNAPSHOT = -32008;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED = -32007;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE = -32006;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY = -32005;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE = -32004;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE = -32003;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE = -32002;\nvar SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_CLEANED_UP = -32001;\nvar SOLANA_ERROR__ADDRESSES__INVALID_BYTE_LENGTH = 28e5;\nvar SOLANA_ERROR__ADDRESSES__STRING_LENGTH_OUT_OF_RANGE = 2800001;\nvar SOLANA_ERROR__ADDRESSES__INVALID_BASE58_ENCODED_ADDRESS = 2800002;\nvar SOLANA_ERROR__ADDRESSES__INVALID_ED25519_PUBLIC_KEY = 2800003;\nvar SOLANA_ERROR__ADDRESSES__MALFORMED_PDA = 2800004;\nvar SOLANA_ERROR__ADDRESSES__PDA_BUMP_SEED_OUT_OF_RANGE = 2800005;\nvar SOLANA_ERROR__ADDRESSES__MAX_NUMBER_OF_PDA_SEEDS_EXCEEDED = 2800006;\nvar SOLANA_ERROR__ADDRESSES__MAX_PDA_SEED_LENGTH_EXCEEDED = 2800007;\nvar SOLANA_ERROR__ADDRESSES__INVALID_SEEDS_POINT_ON_CURVE = 2800008;\nvar SOLANA_ERROR__ADDRESSES__FAILED_TO_FIND_VIABLE_PDA_BUMP_SEED = 2800009;\nvar SOLANA_ERROR__ADDRESSES__PDA_ENDS_WITH_PDA_MARKER = 2800010;\nvar SOLANA_ERROR__ACCOUNTS__ACCOUNT_NOT_FOUND = 323e4;\nvar SOLANA_ERROR__ACCOUNTS__ONE_OR_MORE_ACCOUNTS_NOT_FOUND = 32300001;\nvar SOLANA_ERROR__ACCOUNTS__FAILED_TO_DECODE_ACCOUNT = 3230002;\nvar SOLANA_ERROR__ACCOUNTS__EXPECTED_DECODED_ACCOUNT = 3230003;\nvar SOLANA_ERROR__ACCOUNTS__EXPECTED_ALL_ACCOUNTS_TO_BE_DECODED = 3230004;\nvar SOLANA_ERROR__SUBTLE_CRYPTO__DISALLOWED_IN_INSECURE_CONTEXT = 361e4;\nvar SOLANA_ERROR__SUBTLE_CRYPTO__DIGEST_UNIMPLEMENTED = 3610001;\nvar SOLANA_ERROR__SUBTLE_CRYPTO__ED25519_ALGORITHM_UNIMPLEMENTED = 3610002;\nvar SOLANA_ERROR__SUBTLE_CRYPTO__EXPORT_FUNCTION_UNIMPLEMENTED = 3610003;\nvar SOLANA_ERROR__SUBTLE_CRYPTO__GENERATE_FUNCTION_UNIMPLEMENTED = 3610004;\nvar SOLANA_ERROR__SUBTLE_CRYPTO__SIGN_FUNCTION_UNIMPLEMENTED = 3610005;\nvar SOLANA_ERROR__SUBTLE_CRYPTO__VERIFY_FUNCTION_UNIMPLEMENTED = 3610006;\nvar SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY = 3610007;\nvar SOLANA_ERROR__CRYPTO__RANDOM_VALUES_FUNCTION_UNIMPLEMENTED = 3611e3;\nvar SOLANA_ERROR__KEYS__INVALID_KEY_PAIR_BYTE_LENGTH = 3704e3;\nvar SOLANA_ERROR__KEYS__INVALID_PRIVATE_KEY_BYTE_LENGTH = 3704001;\nvar SOLANA_ERROR__KEYS__INVALID_SIGNATURE_BYTE_LENGTH = 3704002;\nvar SOLANA_ERROR__KEYS__SIGNATURE_STRING_LENGTH_OUT_OF_RANGE = 3704003;\nvar SOLANA_ERROR__KEYS__PUBLIC_KEY_MUST_MATCH_PRIVATE_KEY = 3704004;\nvar SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_ACCOUNTS = 4128e3;\nvar SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_DATA = 4128001;\nvar SOLANA_ERROR__INSTRUCTION__PROGRAM_ID_MISMATCH = 4128002;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__UNKNOWN = 4615e3;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__GENERIC_ERROR = 4615001;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ARGUMENT = 4615002;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_INSTRUCTION_DATA = 4615003;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_DATA = 4615004;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_TOO_SMALL = 4615005;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INSUFFICIENT_FUNDS = 4615006;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_PROGRAM_ID = 4615007;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_REQUIRED_SIGNATURE = 4615008;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_ALREADY_INITIALIZED = 4615009;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__UNINITIALIZED_ACCOUNT = 4615010;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__UNBALANCED_INSTRUCTION = 4615011;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__MODIFIED_PROGRAM_ID = 4615012;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_LAMPORT_SPEND = 4615013;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_DATA_MODIFIED = 4615014;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_LAMPORT_CHANGE = 4615015;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_DATA_MODIFIED = 4615016;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_INDEX = 4615017;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_MODIFIED = 4615018;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__RENT_EPOCH_MODIFIED = 4615019;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__NOT_ENOUGH_ACCOUNT_KEYS = 4615020;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_SIZE_CHANGED = 4615021;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_EXECUTABLE = 4615022;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_FAILED = 4615023;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_OUTSTANDING = 4615024;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_OUT_OF_SYNC = 4615025;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM = 4615026;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ERROR = 4615027;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_DATA_MODIFIED = 4615028;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_LAMPORT_CHANGE = 4615029;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT = 4615030;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_PROGRAM_ID = 4615031;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__CALL_DEPTH = 4615032;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_ACCOUNT = 4615033;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__REENTRANCY_NOT_ALLOWED = 4615034;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__MAX_SEED_LENGTH_EXCEEDED = 4615035;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_SEEDS = 4615036;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_REALLOC = 4615037;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__COMPUTATIONAL_BUDGET_EXCEEDED = 4615038;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__PRIVILEGE_ESCALATION = 4615039;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_ENVIRONMENT_SETUP_FAILURE = 4615040;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPLETE = 4615041;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPILE = 4615042;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__IMMUTABLE = 4615043;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_AUTHORITY = 4615044;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__BORSH_IO_ERROR = 4615045;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_RENT_EXEMPT = 4615046;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_OWNER = 4615047;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ARITHMETIC_OVERFLOW = 4615048;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_SYSVAR = 4615049;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__ILLEGAL_OWNER = 4615050;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_DATA_ALLOCATIONS_EXCEEDED = 4615051;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_EXCEEDED = 4615052;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__MAX_INSTRUCTION_TRACE_LENGTH_EXCEEDED = 4615053;\nvar SOLANA_ERROR__INSTRUCTION_ERROR__BUILTIN_PROGRAMS_MUST_CONSUME_COMPUTE_UNITS = 4615054;\nvar SOLANA_ERROR__SIGNER__ADDRESS_CANNOT_HAVE_MULTIPLE_SIGNERS = 5508e3;\nvar SOLANA_ERROR__SIGNER__EXPECTED_KEY_PAIR_SIGNER = 5508001;\nvar SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_SIGNER = 5508002;\nvar SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_MODIFYING_SIGNER = 5508003;\nvar SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_PARTIAL_SIGNER = 5508004;\nvar SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SIGNER = 5508005;\nvar SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_MODIFYING_SIGNER = 5508006;\nvar SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_PARTIAL_SIGNER = 5508007;\nvar SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SENDING_SIGNER = 5508008;\nvar SOLANA_ERROR__SIGNER__TRANSACTION_CANNOT_HAVE_MULTIPLE_SENDING_SIGNERS = 5508009;\nvar SOLANA_ERROR__SIGNER__TRANSACTION_SENDING_SIGNER_MISSING = 5508010;\nvar SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED = 5508011;\nvar SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES = 5663e3;\nvar SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE = 5663001;\nvar SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME = 5663002;\nvar SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME = 5663003;\nvar SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE = 5663004;\nvar SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING = 5663005;\nvar SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE = 5663006;\nvar SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND = 5663007;\nvar SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING = 5663008;\nvar SOLANA_ERROR__TRANSACTION__SIGNATURES_MISSING = 5663009;\nvar SOLANA_ERROR__TRANSACTION__ADDRESS_MISSING = 5663010;\nvar SOLANA_ERROR__TRANSACTION__FEE_PAYER_MISSING = 5663011;\nvar SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING = 5663012;\nvar SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_INSTRUCTIONS_MISSING = 5663013;\nvar SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_FIRST_INSTRUCTION_MUST_BE_ADVANCE_NONCE = 5663014;\nvar SOLANA_ERROR__TRANSACTION__ADDRESSES_CANNOT_SIGN_TRANSACTION = 5663015;\nvar SOLANA_ERROR__TRANSACTION__CANNOT_ENCODE_WITH_EMPTY_SIGNATURES = 5663016;\nvar SOLANA_ERROR__TRANSACTION__MESSAGE_SIGNATURES_MISMATCH = 5663017;\nvar SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT = 5663018;\nvar SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT = 5663019;\nvar SOLANA_ERROR__TRANSACTION_ERROR__UNKNOWN = 705e4;\nvar SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_IN_USE = 7050001;\nvar SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_LOADED_TWICE = 7050002;\nvar SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_NOT_FOUND = 7050003;\nvar SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_ACCOUNT_NOT_FOUND = 7050004;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_FEE = 7050005;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_FOR_FEE = 7050006;\nvar SOLANA_ERROR__TRANSACTION_ERROR__ALREADY_PROCESSED = 7050007;\nvar SOLANA_ERROR__TRANSACTION_ERROR__BLOCKHASH_NOT_FOUND = 7050008;\nvar SOLANA_ERROR__TRANSACTION_ERROR__CALL_CHAIN_TOO_DEEP = 7050009;\nvar SOLANA_ERROR__TRANSACTION_ERROR__MISSING_SIGNATURE_FOR_FEE = 7050010;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_INDEX = 7050011;\nvar SOLANA_ERROR__TRANSACTION_ERROR__SIGNATURE_FAILURE = 7050012;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_PROGRAM_FOR_EXECUTION = 7050013;\nvar SOLANA_ERROR__TRANSACTION_ERROR__SANITIZE_FAILURE = 7050014;\nvar SOLANA_ERROR__TRANSACTION_ERROR__CLUSTER_MAINTENANCE = 7050015;\nvar SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_BORROW_OUTSTANDING = 7050016;\nvar SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_BLOCK_COST_LIMIT = 7050017;\nvar SOLANA_ERROR__TRANSACTION_ERROR__UNSUPPORTED_VERSION = 7050018;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_WRITABLE_ACCOUNT = 7050019;\nvar SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_ACCOUNT_COST_LIMIT = 7050020;\nvar SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT = 7050021;\nvar SOLANA_ERROR__TRANSACTION_ERROR__TOO_MANY_ACCOUNT_LOCKS = 7050022;\nvar SOLANA_ERROR__TRANSACTION_ERROR__ADDRESS_LOOKUP_TABLE_NOT_FOUND = 7050023;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_OWNER = 7050024;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_DATA = 7050025;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_INDEX = 7050026;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_RENT_PAYING_ACCOUNT = 7050027;\nvar SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_VOTE_COST_LIMIT = 7050028;\nvar SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT = 7050029;\nvar SOLANA_ERROR__TRANSACTION_ERROR__DUPLICATE_INSTRUCTION = 7050030;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_RENT = 7050031;\nvar SOLANA_ERROR__TRANSACTION_ERROR__MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED = 7050032;\nvar SOLANA_ERROR__TRANSACTION_ERROR__INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT = 7050033;\nvar SOLANA_ERROR__TRANSACTION_ERROR__RESANITIZATION_NEEDED = 7050034;\nvar SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_EXECUTION_TEMPORARILY_RESTRICTED = 7050035;\nvar SOLANA_ERROR__TRANSACTION_ERROR__UNBALANCED_TRANSACTION = 7050036;\nvar SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY = 8078e3;\nvar SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH = 8078001;\nvar SOLANA_ERROR__CODECS__EXPECTED_FIXED_LENGTH = 8078002;\nvar SOLANA_ERROR__CODECS__EXPECTED_VARIABLE_LENGTH = 8078003;\nvar SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH = 8078004;\nvar SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH = 8078005;\nvar SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH = 8078006;\nvar SOLANA_ERROR__CODECS__INVALID_NUMBER_OF_ITEMS = 8078007;\nvar SOLANA_ERROR__CODECS__ENUM_DISCRIMINATOR_OUT_OF_RANGE = 8078008;\nvar SOLANA_ERROR__CODECS__INVALID_DISCRIMINATED_UNION_VARIANT = 8078009;\nvar SOLANA_ERROR__CODECS__INVALID_ENUM_VARIANT = 8078010;\nvar SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE = 8078011;\nvar SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE = 8078012;\nvar SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH = 8078013;\nvar SOLANA_ERROR__CODECS__OFFSET_OUT_OF_RANGE = 8078014;\nvar SOLANA_ERROR__CODECS__INVALID_LITERAL_UNION_VARIANT = 8078015;\nvar SOLANA_ERROR__CODECS__LITERAL_UNION_DISCRIMINATOR_OUT_OF_RANGE = 8078016;\nvar SOLANA_ERROR__CODECS__UNION_VARIANT_OUT_OF_RANGE = 8078017;\nvar SOLANA_ERROR__CODECS__INVALID_CONSTANT = 8078018;\nvar SOLANA_ERROR__CODECS__EXPECTED_ZERO_VALUE_TO_MATCH_ITEM_FIXED_SIZE = 8078019;\nvar SOLANA_ERROR__CODECS__ENCODED_BYTES_MUST_NOT_INCLUDE_SENTINEL = 8078020;\nvar SOLANA_ERROR__CODECS__SENTINEL_MISSING_IN_DECODED_BYTES = 8078021;\nvar SOLANA_ERROR__CODECS__CANNOT_USE_LEXICAL_VALUES_AS_ENUM_DISCRIMINATORS = 8078022;\nvar SOLANA_ERROR__RPC__INTEGER_OVERFLOW = 81e5;\nvar SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN = 8100001;\nvar SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR = 8100002;\nvar SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD = 8100003;\nvar SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN = 819e4;\nvar SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID = 8190001;\nvar SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED = 8190002;\nvar SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED = 8190003;\nvar SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT = 8190004;\nvar SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING = 99e5;\nvar SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE = 9900001;\nvar SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING = 9900002;\nvar SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE = 9900003;\nvar SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED = 9900004;\n\n// src/context.ts\nfunction encodeValue(value) {\n if (Array.isArray(value)) {\n const commaSeparatedValues = value.map(encodeValue).join(\n \"%2C%20\"\n /* \", \" */\n );\n return \"%5B\" + commaSeparatedValues + /* \"]\" */\n \"%5D\";\n } else if (typeof value === \"bigint\") {\n return `${value}n`;\n } else {\n return encodeURIComponent(\n String(\n value != null && Object.getPrototypeOf(value) === null ? (\n // Plain objects with no prototype don't have a `toString` method.\n // Convert them before stringifying them.\n { ...value }\n ) : value\n )\n );\n }\n}\nfunction encodeObjectContextEntry([key, value]) {\n return `${key}=${encodeValue(value)}`;\n}\nfunction encodeContextObject(context) {\n const searchParamsString = Object.entries(context).map(encodeObjectContextEntry).join(\"&\");\n return btoa(searchParamsString);\n}\n\n// src/messages.ts\nvar SolanaErrorMessages = {\n [SOLANA_ERROR__ACCOUNTS__ACCOUNT_NOT_FOUND]: \"Account not found at address: $address\",\n [SOLANA_ERROR__ACCOUNTS__EXPECTED_ALL_ACCOUNTS_TO_BE_DECODED]: \"Not all accounts were decoded. Encoded accounts found at addresses: $addresses.\",\n [SOLANA_ERROR__ACCOUNTS__EXPECTED_DECODED_ACCOUNT]: \"Expected decoded account at address: $address\",\n [SOLANA_ERROR__ACCOUNTS__FAILED_TO_DECODE_ACCOUNT]: \"Failed to decode account data at address: $address\",\n [SOLANA_ERROR__ACCOUNTS__ONE_OR_MORE_ACCOUNTS_NOT_FOUND]: \"Accounts not found at addresses: $addresses\",\n [SOLANA_ERROR__ADDRESSES__FAILED_TO_FIND_VIABLE_PDA_BUMP_SEED]: \"Unable to find a viable program address bump seed.\",\n [SOLANA_ERROR__ADDRESSES__INVALID_BASE58_ENCODED_ADDRESS]: \"$putativeAddress is not a base58-encoded address.\",\n [SOLANA_ERROR__ADDRESSES__INVALID_BYTE_LENGTH]: \"Expected base58 encoded address to decode to a byte array of length 32. Actual length: $actualLength.\",\n [SOLANA_ERROR__ADDRESSES__INVALID_ED25519_PUBLIC_KEY]: \"The `CryptoKey` must be an `Ed25519` public key.\",\n [SOLANA_ERROR__ADDRESSES__INVALID_SEEDS_POINT_ON_CURVE]: \"Invalid seeds; point must fall off the Ed25519 curve.\",\n [SOLANA_ERROR__ADDRESSES__MALFORMED_PDA]: \"Expected given program derived address to have the following format: [Address, ProgramDerivedAddressBump].\",\n [SOLANA_ERROR__ADDRESSES__MAX_NUMBER_OF_PDA_SEEDS_EXCEEDED]: \"A maximum of $maxSeeds seeds, including the bump seed, may be supplied when creating an address. Received: $actual.\",\n [SOLANA_ERROR__ADDRESSES__MAX_PDA_SEED_LENGTH_EXCEEDED]: \"The seed at index $index with length $actual exceeds the maximum length of $maxSeedLength bytes.\",\n [SOLANA_ERROR__ADDRESSES__PDA_BUMP_SEED_OUT_OF_RANGE]: \"Expected program derived address bump to be in the range [0, 255], got: $bump.\",\n [SOLANA_ERROR__ADDRESSES__PDA_ENDS_WITH_PDA_MARKER]: \"Program address cannot end with PDA marker.\",\n [SOLANA_ERROR__ADDRESSES__STRING_LENGTH_OUT_OF_RANGE]: \"Expected base58-encoded address string of length in the range [32, 44]. Actual length: $actualLength.\",\n [SOLANA_ERROR__BLOCKHASH_STRING_LENGTH_OUT_OF_RANGE]: \"Expected base58-encoded blockash string of length in the range [32, 44]. Actual length: $actualLength.\",\n [SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED]: \"The network has progressed past the last block for which this transaction could have been committed.\",\n [SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY]: \"Codec [$codecDescription] cannot decode empty byte arrays.\",\n [SOLANA_ERROR__CODECS__CANNOT_USE_LEXICAL_VALUES_AS_ENUM_DISCRIMINATORS]: \"Enum codec cannot use lexical values [$stringValues] as discriminators. Either remove all lexical values or set `useValuesAsDiscriminators` to `false`.\",\n [SOLANA_ERROR__CODECS__ENCODED_BYTES_MUST_NOT_INCLUDE_SENTINEL]: \"Sentinel [$hexSentinel] must not be present in encoded bytes [$hexEncodedBytes].\",\n [SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH]: \"Encoder and decoder must have the same fixed size, got [$encoderFixedSize] and [$decoderFixedSize].\",\n [SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH]: \"Encoder and decoder must have the same max size, got [$encoderMaxSize] and [$decoderMaxSize].\",\n [SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH]: \"Encoder and decoder must either both be fixed-size or variable-size.\",\n [SOLANA_ERROR__CODECS__ENUM_DISCRIMINATOR_OUT_OF_RANGE]: \"Enum discriminator out of range. Expected a number in [$formattedValidDiscriminators], got $discriminator.\",\n [SOLANA_ERROR__CODECS__EXPECTED_FIXED_LENGTH]: \"Expected a fixed-size codec, got a variable-size one.\",\n [SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH]: \"Codec [$codecDescription] expected a positive byte length, got $bytesLength.\",\n [SOLANA_ERROR__CODECS__EXPECTED_VARIABLE_LENGTH]: \"Expected a variable-size codec, got a fixed-size one.\",\n [SOLANA_ERROR__CODECS__EXPECTED_ZERO_VALUE_TO_MATCH_ITEM_FIXED_SIZE]: \"Codec [$codecDescription] expected zero-value [$hexZeroValue] to have the same size as the provided fixed-size item [$expectedSize bytes].\",\n [SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH]: \"Codec [$codecDescription] expected $expected bytes, got $bytesLength.\",\n [SOLANA_ERROR__CODECS__INVALID_CONSTANT]: \"Expected byte array constant [$hexConstant] to be present in data [$hexData] at offset [$offset].\",\n [SOLANA_ERROR__CODECS__INVALID_DISCRIMINATED_UNION_VARIANT]: \"Invalid discriminated union variant. Expected one of [$variants], got $value.\",\n [SOLANA_ERROR__CODECS__INVALID_ENUM_VARIANT]: \"Invalid enum variant. Expected one of [$stringValues] or a number in [$formattedNumericalValues], got $variant.\",\n [SOLANA_ERROR__CODECS__INVALID_LITERAL_UNION_VARIANT]: \"Invalid literal union variant. Expected one of [$variants], got $value.\",\n [SOLANA_ERROR__CODECS__INVALID_NUMBER_OF_ITEMS]: \"Expected [$codecDescription] to have $expected items, got $actual.\",\n [SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE]: \"Invalid value $value for base $base with alphabet $alphabet.\",\n [SOLANA_ERROR__CODECS__LITERAL_UNION_DISCRIMINATOR_OUT_OF_RANGE]: \"Literal union discriminator out of range. Expected a number between $minRange and $maxRange, got $discriminator.\",\n [SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE]: \"Codec [$codecDescription] expected number to be in the range [$min, $max], got $value.\",\n [SOLANA_ERROR__CODECS__OFFSET_OUT_OF_RANGE]: \"Codec [$codecDescription] expected offset to be in the range [0, $bytesLength], got $offset.\",\n [SOLANA_ERROR__CODECS__SENTINEL_MISSING_IN_DECODED_BYTES]: \"Expected sentinel [$hexSentinel] to be present in decoded bytes [$hexDecodedBytes].\",\n [SOLANA_ERROR__CODECS__UNION_VARIANT_OUT_OF_RANGE]: \"Union variant out of range. Expected an index between $minRange and $maxRange, got $variant.\",\n [SOLANA_ERROR__CRYPTO__RANDOM_VALUES_FUNCTION_UNIMPLEMENTED]: \"No random values implementation could be found.\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_ALREADY_INITIALIZED]: \"instruction requires an uninitialized account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_FAILED]: \"instruction tries to borrow reference for an account which is already borrowed\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_OUTSTANDING]: \"instruction left account with an outstanding borrowed reference\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_SIZE_CHANGED]: \"program other than the account's owner changed the size of the account data\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_TOO_SMALL]: \"account data too small for instruction\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_EXECUTABLE]: \"instruction expected an executable account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_RENT_EXEMPT]: \"An account does not have enough lamports to be rent-exempt\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ARITHMETIC_OVERFLOW]: \"Program arithmetic overflowed\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__BORSH_IO_ERROR]: \"Failed to serialize or deserialize account data: $encodedData\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__BUILTIN_PROGRAMS_MUST_CONSUME_COMPUTE_UNITS]: \"Builtin programs must consume compute units\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__CALL_DEPTH]: \"Cross-program invocation call depth too deep\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__COMPUTATIONAL_BUDGET_EXCEEDED]: \"Computational budget exceeded\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM]: \"custom program error: #$code\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_INDEX]: \"instruction contains duplicate accounts\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_OUT_OF_SYNC]: \"instruction modifications of multiply-passed account differ\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT]: \"executable accounts must be rent exempt\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_DATA_MODIFIED]: \"instruction changed executable accounts data\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_LAMPORT_CHANGE]: \"instruction changed the balance of an executable account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_MODIFIED]: \"instruction changed executable bit of an account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_DATA_MODIFIED]: \"instruction modified data of an account it does not own\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_LAMPORT_SPEND]: \"instruction spent from the balance of an account it does not own\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__GENERIC_ERROR]: \"generic instruction error\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__ILLEGAL_OWNER]: \"Provided owner is not allowed\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__IMMUTABLE]: \"Account is immutable\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_AUTHORITY]: \"Incorrect authority provided\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_PROGRAM_ID]: \"incorrect program id for instruction\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INSUFFICIENT_FUNDS]: \"insufficient funds for instruction\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_DATA]: \"invalid account data for instruction\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_OWNER]: \"Invalid account owner\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ARGUMENT]: \"invalid program argument\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ERROR]: \"program returned invalid error code\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_INSTRUCTION_DATA]: \"invalid instruction data\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_REALLOC]: \"Failed to reallocate account data\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_SEEDS]: \"Provided seeds do not result in a valid address\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_DATA_ALLOCATIONS_EXCEEDED]: \"Accounts data allocations exceeded the maximum allowed per transaction\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_EXCEEDED]: \"Max accounts exceeded\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__MAX_INSTRUCTION_TRACE_LENGTH_EXCEEDED]: \"Max instruction trace length exceeded\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__MAX_SEED_LENGTH_EXCEEDED]: \"Length of the seed is too long for address generation\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_ACCOUNT]: \"An account required by the instruction is missing\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_REQUIRED_SIGNATURE]: \"missing required signature for instruction\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__MODIFIED_PROGRAM_ID]: \"instruction illegally modified the program id of an account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__NOT_ENOUGH_ACCOUNT_KEYS]: \"insufficient account keys for instruction\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__PRIVILEGE_ESCALATION]: \"Cross-program invocation with unauthorized signer or writable account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_ENVIRONMENT_SETUP_FAILURE]: \"Failed to create program execution environment\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPILE]: \"Program failed to compile\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPLETE]: \"Program failed to complete\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_DATA_MODIFIED]: \"instruction modified data of a read-only account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_LAMPORT_CHANGE]: \"instruction changed the balance of a read-only account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__REENTRANCY_NOT_ALLOWED]: \"Cross-program invocation reentrancy not allowed for this instruction\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__RENT_EPOCH_MODIFIED]: \"instruction modified rent epoch of an account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__UNBALANCED_INSTRUCTION]: \"sum of account balances before and after instruction do not match\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__UNINITIALIZED_ACCOUNT]: \"instruction requires an initialized account\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__UNKNOWN]: \"\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_PROGRAM_ID]: \"Unsupported program id\",\n [SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_SYSVAR]: \"Unsupported sysvar\",\n [SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_ACCOUNTS]: \"The instruction does not have any accounts.\",\n [SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_DATA]: \"The instruction does not have any data.\",\n [SOLANA_ERROR__INSTRUCTION__PROGRAM_ID_MISMATCH]: \"Expected instruction to have progress address $expectedProgramAddress, got $actualProgramAddress.\",\n [SOLANA_ERROR__INVALID_BLOCKHASH_BYTE_LENGTH]: \"Expected base58 encoded blockhash to decode to a byte array of length 32. Actual length: $actualLength.\",\n [SOLANA_ERROR__INVALID_NONCE]: \"The nonce `$expectedNonceValue` is no longer valid. It has advanced to `$actualNonceValue`\",\n [SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING]: \"Invariant violation: Found no abortable iterable cache entry for key `$cacheKey`. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant\",\n [SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED]: \"Invariant violation: This data publisher does not publish to the channel named `$channelName`. Supported channels include $supportedChannelNames.\",\n [SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE]: \"Invariant violation: WebSocket message iterator state is corrupt; iterated without first resolving existing message promise. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant\",\n [SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING]: \"Invariant violation: WebSocket message iterator is missing state storage. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant\",\n [SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE]: \"Invariant violation: Switch statement non-exhaustive. Received unexpected value `$unexpectedValue`. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant\",\n [SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR]: \"JSON-RPC error: Internal JSON-RPC error ($__serverMessage)\",\n [SOLANA_ERROR__JSON_RPC__INVALID_PARAMS]: \"JSON-RPC error: Invalid method parameter(s) ($__serverMessage)\",\n [SOLANA_ERROR__JSON_RPC__INVALID_REQUEST]: \"JSON-RPC error: The JSON sent is not a valid `Request` object ($__serverMessage)\",\n [SOLANA_ERROR__JSON_RPC__METHOD_NOT_FOUND]: \"JSON-RPC error: The method does not exist / is not available ($__serverMessage)\",\n [SOLANA_ERROR__JSON_RPC__PARSE_ERROR]: \"JSON-RPC error: An error occurred on the server while parsing the JSON text ($__serverMessage)\",\n [SOLANA_ERROR__JSON_RPC__SCAN_ERROR]: \"$__serverMessage\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_CLEANED_UP]: \"$__serverMessage\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE]: \"$__serverMessage\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET]: \"$__serverMessage\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX]: \"$__serverMessage\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED]: \"$__serverMessage\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED]: \"Minimum context slot has not been reached\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY]: \"Node is unhealthy; behind by $numSlotsBehind slots\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NO_SNAPSHOT]: \"No snapshot\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE]: \"Transaction simulation failed\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED]: \"$__serverMessage\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE]: \"Transaction history is not available from this node\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE]: \"$__serverMessage\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH]: \"Transaction signature length mismatch\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE]: \"Transaction signature verification failure\",\n [SOLANA_ERROR__JSON_RPC__SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION]: \"$__serverMessage\",\n [SOLANA_ERROR__KEYS__INVALID_KEY_PAIR_BYTE_LENGTH]: \"Key pair bytes must be of length 64, got $byteLength.\",\n [SOLANA_ERROR__KEYS__INVALID_PRIVATE_KEY_BYTE_LENGTH]: \"Expected private key bytes with length 32. Actual length: $actualLength.\",\n [SOLANA_ERROR__KEYS__INVALID_SIGNATURE_BYTE_LENGTH]: \"Expected base58-encoded signature to decode to a byte array of length 64. Actual length: $actualLength.\",\n [SOLANA_ERROR__KEYS__PUBLIC_KEY_MUST_MATCH_PRIVATE_KEY]: \"The provided private key does not match the provided public key.\",\n [SOLANA_ERROR__KEYS__SIGNATURE_STRING_LENGTH_OUT_OF_RANGE]: \"Expected base58-encoded signature string of length in the range [64, 88]. Actual length: $actualLength.\",\n [SOLANA_ERROR__LAMPORTS_OUT_OF_RANGE]: \"Lamports value must be in the range [0, 2e64-1]\",\n [SOLANA_ERROR__MALFORMED_BIGINT_STRING]: \"`$value` cannot be parsed as a `BigInt`\",\n [SOLANA_ERROR__MALFORMED_JSON_RPC_ERROR]: \"$message\",\n [SOLANA_ERROR__MALFORMED_NUMBER_STRING]: \"`$value` cannot be parsed as a `Number`\",\n [SOLANA_ERROR__NONCE_ACCOUNT_NOT_FOUND]: \"No nonce account could be found at address `$nonceAccountAddress`\",\n [SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN]: \"The notification name must end in 'Notifications' and the API must supply a subscription plan creator function for the notification '$notificationName'.\",\n [SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED]: \"WebSocket was closed before payload could be added to the send buffer\",\n [SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED]: \"WebSocket connection closed\",\n [SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT]: \"WebSocket failed to connect\",\n [SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID]: \"Failed to obtain a subscription id from the server\",\n [SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD]: \"Could not find an API plan for RPC method: `$method`\",\n [SOLANA_ERROR__RPC__INTEGER_OVERFLOW]: \"The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`.\",\n [SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR]: \"HTTP error ($statusCode): $message\",\n [SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN]: \"HTTP header(s) forbidden: $headers. Learn more at https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.\",\n [SOLANA_ERROR__SIGNER__ADDRESS_CANNOT_HAVE_MULTIPLE_SIGNERS]: \"Multiple distinct signers were identified for address `$address`. Please ensure that you are using the same signer instance for each address.\",\n [SOLANA_ERROR__SIGNER__EXPECTED_KEY_PAIR_SIGNER]: \"The provided value does not implement the `KeyPairSigner` interface\",\n [SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_MODIFYING_SIGNER]: \"The provided value does not implement the `MessageModifyingSigner` interface\",\n [SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_PARTIAL_SIGNER]: \"The provided value does not implement the `MessagePartialSigner` interface\",\n [SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_SIGNER]: \"The provided value does not implement any of the `MessageSigner` interfaces\",\n [SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_MODIFYING_SIGNER]: \"The provided value does not implement the `TransactionModifyingSigner` interface\",\n [SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_PARTIAL_SIGNER]: \"The provided value does not implement the `TransactionPartialSigner` interface\",\n [SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SENDING_SIGNER]: \"The provided value does not implement the `TransactionSendingSigner` interface\",\n [SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SIGNER]: \"The provided value does not implement any of the `TransactionSigner` interfaces\",\n [SOLANA_ERROR__SIGNER__TRANSACTION_CANNOT_HAVE_MULTIPLE_SENDING_SIGNERS]: \"More than one `TransactionSendingSigner` was identified.\",\n [SOLANA_ERROR__SIGNER__TRANSACTION_SENDING_SIGNER_MISSING]: \"No `TransactionSendingSigner` was identified. Please provide a valid `ITransactionWithSingleSendingSigner` transaction.\",\n [SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED]: \"Wallet account signers do not support signing multiple messages/transactions in a single operation\",\n [SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY]: \"Cannot export a non-extractable key.\",\n [SOLANA_ERROR__SUBTLE_CRYPTO__DIGEST_UNIMPLEMENTED]: \"No digest implementation could be found.\",\n [SOLANA_ERROR__SUBTLE_CRYPTO__DISALLOWED_IN_INSECURE_CONTEXT]: \"Cryptographic operations are only allowed in secure browser contexts. Read more here: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts.\",\n [SOLANA_ERROR__SUBTLE_CRYPTO__ED25519_ALGORITHM_UNIMPLEMENTED]: \"This runtime does not support the generation of Ed25519 key pairs.\\n\\nInstall @solana/webcrypto-ed25519-polyfill and call its `install` function before generating keys in environments that do not support Ed25519.\\n\\nFor a list of runtimes that currently support Ed25519 operations, visit https://github.com/WICG/webcrypto-secure-curves/issues/20.\",\n [SOLANA_ERROR__SUBTLE_CRYPTO__EXPORT_FUNCTION_UNIMPLEMENTED]: \"No signature verification implementation could be found.\",\n [SOLANA_ERROR__SUBTLE_CRYPTO__GENERATE_FUNCTION_UNIMPLEMENTED]: \"No key generation implementation could be found.\",\n [SOLANA_ERROR__SUBTLE_CRYPTO__SIGN_FUNCTION_UNIMPLEMENTED]: \"No signing implementation could be found.\",\n [SOLANA_ERROR__SUBTLE_CRYPTO__VERIFY_FUNCTION_UNIMPLEMENTED]: \"No key export implementation could be found.\",\n [SOLANA_ERROR__TIMESTAMP_OUT_OF_RANGE]: \"Timestamp value must be in the range [-(2n ** 63n), (2n ** 63n) - 1]. `$value` given\",\n [SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_BORROW_OUTSTANDING]: \"Transaction processing left an account with an outstanding borrowed reference\",\n [SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_IN_USE]: \"Account in use\",\n [SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_LOADED_TWICE]: \"Account loaded twice\",\n [SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_NOT_FOUND]: \"Attempt to debit an account but found no record of a prior credit.\",\n [SOLANA_ERROR__TRANSACTION_ERROR__ADDRESS_LOOKUP_TABLE_NOT_FOUND]: \"Transaction loads an address table account that doesn't exist\",\n [SOLANA_ERROR__TRANSACTION_ERROR__ALREADY_PROCESSED]: \"This transaction has already been processed\",\n [SOLANA_ERROR__TRANSACTION_ERROR__BLOCKHASH_NOT_FOUND]: \"Blockhash not found\",\n [SOLANA_ERROR__TRANSACTION_ERROR__CALL_CHAIN_TOO_DEEP]: \"Loader call chain is too deep\",\n [SOLANA_ERROR__TRANSACTION_ERROR__CLUSTER_MAINTENANCE]: \"Transactions are currently disabled due to cluster maintenance\",\n [SOLANA_ERROR__TRANSACTION_ERROR__DUPLICATE_INSTRUCTION]: \"Transaction contains a duplicate instruction ($index) that is not allowed\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_FEE]: \"Insufficient funds for fee\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_RENT]: \"Transaction results in an account ($accountIndex) with insufficient funds for rent\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_FOR_FEE]: \"This account may not be used to pay transaction fees\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_INDEX]: \"Transaction contains an invalid account reference\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_DATA]: \"Transaction loads an address table account with invalid data\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_INDEX]: \"Transaction address table lookup uses an invalid index\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_OWNER]: \"Transaction loads an address table account with an invalid owner\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT]: \"LoadedAccountsDataSizeLimit set for transaction must be greater than 0.\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_PROGRAM_FOR_EXECUTION]: \"This program may not be used for executing instructions\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_RENT_PAYING_ACCOUNT]: \"Transaction leaves an account with a lower balance than rent-exempt minimum\",\n [SOLANA_ERROR__TRANSACTION_ERROR__INVALID_WRITABLE_ACCOUNT]: \"Transaction loads a writable account that cannot be written\",\n [SOLANA_ERROR__TRANSACTION_ERROR__MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED]: \"Transaction exceeded max loaded accounts data size cap\",\n [SOLANA_ERROR__TRANSACTION_ERROR__MISSING_SIGNATURE_FOR_FEE]: \"Transaction requires a fee but has no signature present\",\n [SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_ACCOUNT_NOT_FOUND]: \"Attempt to load a program that does not exist\",\n [SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_EXECUTION_TEMPORARILY_RESTRICTED]: \"Execution of the program referenced by account at index $accountIndex is temporarily restricted.\",\n [SOLANA_ERROR__TRANSACTION_ERROR__RESANITIZATION_NEEDED]: \"ResanitizationNeeded\",\n [SOLANA_ERROR__TRANSACTION_ERROR__SANITIZE_FAILURE]: \"Transaction failed to sanitize accounts offsets correctly\",\n [SOLANA_ERROR__TRANSACTION_ERROR__SIGNATURE_FAILURE]: \"Transaction did not pass signature verification\",\n [SOLANA_ERROR__TRANSACTION_ERROR__TOO_MANY_ACCOUNT_LOCKS]: \"Transaction locked too many accounts\",\n [SOLANA_ERROR__TRANSACTION_ERROR__UNBALANCED_TRANSACTION]: \"Sum of account balances before and after transaction do not match\",\n [SOLANA_ERROR__TRANSACTION_ERROR__UNKNOWN]: \"The transaction failed with the error `$errorName`\",\n [SOLANA_ERROR__TRANSACTION_ERROR__UNSUPPORTED_VERSION]: \"Transaction version is unsupported\",\n [SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT]: \"Transaction would exceed account data limit within the block\",\n [SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT]: \"Transaction would exceed total account data limit\",\n [SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_ACCOUNT_COST_LIMIT]: \"Transaction would exceed max account limit within the block\",\n [SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_BLOCK_COST_LIMIT]: \"Transaction would exceed max Block Cost Limit\",\n [SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_VOTE_COST_LIMIT]: \"Transaction would exceed max Vote Cost Limit\",\n [SOLANA_ERROR__TRANSACTION__ADDRESSES_CANNOT_SIGN_TRANSACTION]: \"Attempted to sign a transaction with an address that is not a signer for it\",\n [SOLANA_ERROR__TRANSACTION__ADDRESS_MISSING]: \"Transaction is missing an address at index: $index.\",\n [SOLANA_ERROR__TRANSACTION__CANNOT_ENCODE_WITH_EMPTY_SIGNATURES]: \"Transaction has no expected signers therefore it cannot be encoded\",\n [SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME]: \"Transaction does not have a blockhash lifetime\",\n [SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME]: \"Transaction is not a durable nonce transaction\",\n [SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING]: \"Contents of these address lookup tables unknown: $lookupTableAddresses\",\n [SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE]: \"Lookup of address at index $highestRequestedIndex failed for lookup table `$lookupTableAddress`. Highest known index is $highestKnownIndex. The lookup table may have been extended since its contents were retrieved\",\n [SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING]: \"No fee payer set in CompiledTransaction\",\n [SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND]: \"Could not find program address at index $index\",\n [SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT]: \"Failed to estimate the compute unit consumption for this transaction message. This is likely because simulating the transaction failed. Inspect the `cause` property of this error to learn more\",\n [SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT]: \"Transaction failed when it was simulated in order to estimate the compute unit consumption. The compute unit estimate provided is for a transaction that failed when simulated and may not be representative of the compute units this transaction would consume if successful. Inspect the `cause` property of this error to learn more\",\n [SOLANA_ERROR__TRANSACTION__FEE_PAYER_MISSING]: \"Transaction is missing a fee payer.\",\n [SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING]: \"Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer.\",\n [SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_FIRST_INSTRUCTION_MUST_BE_ADVANCE_NONCE]: \"Transaction first instruction is not advance nonce account instruction.\",\n [SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_INSTRUCTIONS_MISSING]: \"Transaction with no instructions cannot be durable nonce transaction.\",\n [SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES]: \"This transaction includes an address (`$programAddress`) which is both invoked and set as the fee payer. Program addresses may not pay fees\",\n [SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE]: \"This transaction includes an address (`$programAddress`) which is both invoked and marked writable. Program addresses may not be writable\",\n [SOLANA_ERROR__TRANSACTION__MESSAGE_SIGNATURES_MISMATCH]: \"The transaction message expected the transaction to have $signerAddressesLength signatures, got $signaturesLength.\",\n [SOLANA_ERROR__TRANSACTION__SIGNATURES_MISSING]: \"Transaction is missing signatures for addresses: $addresses.\",\n [SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE]: \"Transaction version must be in the range [0, 127]. `$actualVersion` given\"\n};\n\n// src/message-formatter.ts\nvar START_INDEX = \"i\";\nvar TYPE = \"t\";\nfunction getHumanReadableErrorMessage(code, context = {}) {\n const messageFormatString = SolanaErrorMessages[code];\n if (messageFormatString.length === 0) {\n return \"\";\n }\n let state;\n function commitStateUpTo(endIndex) {\n if (state[TYPE] === 2 /* Variable */) {\n const variableName = messageFormatString.slice(state[START_INDEX] + 1, endIndex);\n fragments.push(\n variableName in context ? (\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${context[variableName]}`\n ) : `$${variableName}`\n );\n } else if (state[TYPE] === 1 /* Text */) {\n fragments.push(messageFormatString.slice(state[START_INDEX], endIndex));\n }\n }\n const fragments = [];\n messageFormatString.split(\"\").forEach((char, ii) => {\n if (ii === 0) {\n state = {\n [START_INDEX]: 0,\n [TYPE]: messageFormatString[0] === \"\\\\\" ? 0 /* EscapeSequence */ : messageFormatString[0] === \"$\" ? 2 /* Variable */ : 1 /* Text */\n };\n return;\n }\n let nextState;\n switch (state[TYPE]) {\n case 0 /* EscapeSequence */:\n nextState = { [START_INDEX]: ii, [TYPE]: 1 /* Text */ };\n break;\n case 1 /* Text */:\n if (char === \"\\\\\") {\n nextState = { [START_INDEX]: ii, [TYPE]: 0 /* EscapeSequence */ };\n } else if (char === \"$\") {\n nextState = { [START_INDEX]: ii, [TYPE]: 2 /* Variable */ };\n }\n break;\n case 2 /* Variable */:\n if (char === \"\\\\\") {\n nextState = { [START_INDEX]: ii, [TYPE]: 0 /* EscapeSequence */ };\n } else if (char === \"$\") {\n nextState = { [START_INDEX]: ii, [TYPE]: 2 /* Variable */ };\n } else if (!char.match(/\\w/)) {\n nextState = { [START_INDEX]: ii, [TYPE]: 1 /* Text */ };\n }\n break;\n }\n if (nextState) {\n if (state !== nextState) {\n commitStateUpTo(ii);\n }\n state = nextState;\n }\n });\n commitStateUpTo();\n return fragments.join(\"\");\n}\nfunction getErrorMessage(code, context = {}) {\n if (process.env.NODE_ENV !== \"production\") {\n return getHumanReadableErrorMessage(code, context);\n } else {\n let decodingAdviceMessage = `Solana error #${code}; Decode this error by running \\`npx @solana/errors decode -- ${code}`;\n if (Object.keys(context).length) {\n decodingAdviceMessage += ` '${encodeContextObject(context)}'`;\n }\n return `${decodingAdviceMessage}\\``;\n }\n}\n\n// src/error.ts\nfunction isSolanaError(e, code) {\n const isSolanaError2 = e instanceof Error && e.name === \"SolanaError\";\n if (isSolanaError2) {\n if (code !== undefined) {\n return e.context.__code === code;\n }\n return true;\n }\n return false;\n}\nvar SolanaError = class extends Error {\n /**\n * Indicates the root cause of this {@link SolanaError}, if any.\n *\n * For example, a transaction error might have an instruction error as its root cause. In this\n * case, you will be able to access the instruction error on the transaction error as `cause`.\n */\n cause = this.cause;\n /**\n * Contains context that can assist in understanding or recovering from a {@link SolanaError}.\n */\n context;\n constructor(...[code, contextAndErrorOptions]) {\n let context;\n let errorOptions;\n if (contextAndErrorOptions) {\n const { cause, ...contextRest } = contextAndErrorOptions;\n if (cause) {\n errorOptions = { cause };\n }\n if (Object.keys(contextRest).length > 0) {\n context = contextRest;\n }\n }\n const message = getErrorMessage(code, context);\n super(message, errorOptions);\n this.context = {\n __code: code,\n ...context\n };\n this.name = \"SolanaError\";\n }\n};\n\n// src/stack-trace.ts\nfunction safeCaptureStackTrace(...args) {\n if (\"captureStackTrace\" in Error && typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(...args);\n }\n}\n\n// src/rpc-enum-errors.ts\nfunction getSolanaErrorFromRpcError({ errorCodeBaseOffset, getErrorContext, orderedErrorNames, rpcEnumError }, constructorOpt) {\n let rpcErrorName;\n let rpcErrorContext;\n if (typeof rpcEnumError === \"string\") {\n rpcErrorName = rpcEnumError;\n } else {\n rpcErrorName = Object.keys(rpcEnumError)[0];\n rpcErrorContext = rpcEnumError[rpcErrorName];\n }\n const codeOffset = orderedErrorNames.indexOf(rpcErrorName);\n const errorCode = errorCodeBaseOffset + codeOffset;\n const errorContext = getErrorContext(errorCode, rpcErrorName, rpcErrorContext);\n const err = new SolanaError(errorCode, errorContext);\n safeCaptureStackTrace(err, constructorOpt);\n return err;\n}\n\n// src/instruction-error.ts\nvar ORDERED_ERROR_NAMES = [\n // Keep synced with RPC source: https://github.com/anza-xyz/agave/blob/master/sdk/program/src/instruction.rs\n // If this list ever gets too large, consider implementing a compression strategy like this:\n // https://gist.github.com/steveluscher/aaa7cbbb5433b1197983908a40860c47\n \"GenericError\",\n \"InvalidArgument\",\n \"InvalidInstructionData\",\n \"InvalidAccountData\",\n \"AccountDataTooSmall\",\n \"InsufficientFunds\",\n \"IncorrectProgramId\",\n \"MissingRequiredSignature\",\n \"AccountAlreadyInitialized\",\n \"UninitializedAccount\",\n \"UnbalancedInstruction\",\n \"ModifiedProgramId\",\n \"ExternalAccountLamportSpend\",\n \"ExternalAccountDataModified\",\n \"ReadonlyLamportChange\",\n \"ReadonlyDataModified\",\n \"DuplicateAccountIndex\",\n \"ExecutableModified\",\n \"RentEpochModified\",\n \"NotEnoughAccountKeys\",\n \"AccountDataSizeChanged\",\n \"AccountNotExecutable\",\n \"AccountBorrowFailed\",\n \"AccountBorrowOutstanding\",\n \"DuplicateAccountOutOfSync\",\n \"Custom\",\n \"InvalidError\",\n \"ExecutableDataModified\",\n \"ExecutableLamportChange\",\n \"ExecutableAccountNotRentExempt\",\n \"UnsupportedProgramId\",\n \"CallDepth\",\n \"MissingAccount\",\n \"ReentrancyNotAllowed\",\n \"MaxSeedLengthExceeded\",\n \"InvalidSeeds\",\n \"InvalidRealloc\",\n \"ComputationalBudgetExceeded\",\n \"PrivilegeEscalation\",\n \"ProgramEnvironmentSetupFailure\",\n \"ProgramFailedToComplete\",\n \"ProgramFailedToCompile\",\n \"Immutable\",\n \"IncorrectAuthority\",\n \"BorshIoError\",\n \"AccountNotRentExempt\",\n \"InvalidAccountOwner\",\n \"ArithmeticOverflow\",\n \"UnsupportedSysvar\",\n \"IllegalOwner\",\n \"MaxAccountsDataAllocationsExceeded\",\n \"MaxAccountsExceeded\",\n \"MaxInstructionTraceLengthExceeded\",\n \"BuiltinProgramsMustConsumeComputeUnits\"\n];\nfunction getSolanaErrorFromInstructionError(index, instructionError) {\n const numberIndex = Number(index);\n return getSolanaErrorFromRpcError(\n {\n errorCodeBaseOffset: 4615001,\n getErrorContext(errorCode, rpcErrorName, rpcErrorContext) {\n if (errorCode === SOLANA_ERROR__INSTRUCTION_ERROR__UNKNOWN) {\n return {\n errorName: rpcErrorName,\n index: numberIndex,\n ...rpcErrorContext !== undefined ? { instructionErrorContext: rpcErrorContext } : null\n };\n } else if (errorCode === SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM) {\n return {\n code: Number(rpcErrorContext),\n index: numberIndex\n };\n } else if (errorCode === SOLANA_ERROR__INSTRUCTION_ERROR__BORSH_IO_ERROR) {\n return {\n encodedData: rpcErrorContext,\n index: numberIndex\n };\n }\n return { index: numberIndex };\n },\n orderedErrorNames: ORDERED_ERROR_NAMES,\n rpcEnumError: instructionError\n },\n getSolanaErrorFromInstructionError\n );\n}\n\n// src/transaction-error.ts\nvar ORDERED_ERROR_NAMES2 = [\n // Keep synced with RPC source: https://github.com/anza-xyz/agave/blob/master/sdk/src/transaction/error.rs\n // If this list ever gets too large, consider implementing a compression strategy like this:\n // https://gist.github.com/steveluscher/aaa7cbbb5433b1197983908a40860c47\n \"AccountInUse\",\n \"AccountLoadedTwice\",\n \"AccountNotFound\",\n \"ProgramAccountNotFound\",\n \"InsufficientFundsForFee\",\n \"InvalidAccountForFee\",\n \"AlreadyProcessed\",\n \"BlockhashNotFound\",\n // `InstructionError` intentionally omitted; delegated to `getSolanaErrorFromInstructionError`\n \"CallChainTooDeep\",\n \"MissingSignatureForFee\",\n \"InvalidAccountIndex\",\n \"SignatureFailure\",\n \"InvalidProgramForExecution\",\n \"SanitizeFailure\",\n \"ClusterMaintenance\",\n \"AccountBorrowOutstanding\",\n \"WouldExceedMaxBlockCostLimit\",\n \"UnsupportedVersion\",\n \"InvalidWritableAccount\",\n \"WouldExceedMaxAccountCostLimit\",\n \"WouldExceedAccountDataBlockLimit\",\n \"TooManyAccountLocks\",\n \"AddressLookupTableNotFound\",\n \"InvalidAddressLookupTableOwner\",\n \"InvalidAddressLookupTableData\",\n \"InvalidAddressLookupTableIndex\",\n \"InvalidRentPayingAccount\",\n \"WouldExceedMaxVoteCostLimit\",\n \"WouldExceedAccountDataTotalLimit\",\n \"DuplicateInstruction\",\n \"InsufficientFundsForRent\",\n \"MaxLoadedAccountsDataSizeExceeded\",\n \"InvalidLoadedAccountsDataSizeLimit\",\n \"ResanitizationNeeded\",\n \"ProgramExecutionTemporarilyRestricted\",\n \"UnbalancedTransaction\"\n];\nfunction getSolanaErrorFromTransactionError(transactionError) {\n if (typeof transactionError === \"object\" && \"InstructionError\" in transactionError) {\n return getSolanaErrorFromInstructionError(\n ...transactionError.InstructionError\n );\n }\n return getSolanaErrorFromRpcError(\n {\n errorCodeBaseOffset: 7050001,\n getErrorContext(errorCode, rpcErrorName, rpcErrorContext) {\n if (errorCode === SOLANA_ERROR__TRANSACTION_ERROR__UNKNOWN) {\n return {\n errorName: rpcErrorName,\n ...rpcErrorContext !== undefined ? { transactionErrorContext: rpcErrorContext } : null\n };\n } else if (errorCode === SOLANA_ERROR__TRANSACTION_ERROR__DUPLICATE_INSTRUCTION) {\n return {\n index: Number(rpcErrorContext)\n };\n } else if (errorCode === SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_RENT || errorCode === SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_EXECUTION_TEMPORARILY_RESTRICTED) {\n return {\n accountIndex: Number(rpcErrorContext.account_index)\n };\n }\n },\n orderedErrorNames: ORDERED_ERROR_NAMES2,\n rpcEnumError: transactionError\n },\n getSolanaErrorFromTransactionError\n );\n}\n\n// src/json-rpc-error.ts\nfunction getSolanaErrorFromJsonRpcError(putativeErrorResponse) {\n let out;\n if (isRpcErrorResponse(putativeErrorResponse)) {\n const { code: rawCode, data, message } = putativeErrorResponse;\n const code = Number(rawCode);\n if (code === SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE) {\n const { err, ...preflightErrorContext } = data;\n const causeObject = err ? { cause: getSolanaErrorFromTransactionError(err) } : null;\n out = new SolanaError(SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE, {\n ...preflightErrorContext,\n ...causeObject\n });\n } else {\n let errorContext;\n switch (code) {\n case SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR:\n case SOLANA_ERROR__JSON_RPC__INVALID_PARAMS:\n case SOLANA_ERROR__JSON_RPC__INVALID_REQUEST:\n case SOLANA_ERROR__JSON_RPC__METHOD_NOT_FOUND:\n case SOLANA_ERROR__JSON_RPC__PARSE_ERROR:\n case SOLANA_ERROR__JSON_RPC__SCAN_ERROR:\n case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_CLEANED_UP:\n case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE:\n case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET:\n case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX:\n case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED:\n case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED:\n case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE:\n case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION:\n errorContext = { __serverMessage: message };\n break;\n default:\n if (typeof data === \"object\" && !Array.isArray(data)) {\n errorContext = data;\n }\n }\n out = new SolanaError(code, errorContext);\n }\n } else {\n const message = typeof putativeErrorResponse === \"object\" && putativeErrorResponse !== null && \"message\" in putativeErrorResponse && typeof putativeErrorResponse.message === \"string\" ? putativeErrorResponse.message : \"Malformed JSON-RPC error with no message attribute\";\n out = new SolanaError(SOLANA_ERROR__MALFORMED_JSON_RPC_ERROR, { error: putativeErrorResponse, message });\n }\n safeCaptureStackTrace(out, getSolanaErrorFromJsonRpcError);\n return out;\n}\nfunction isRpcErrorResponse(value) {\n return typeof value === \"object\" && value !== null && \"code\" in value && \"message\" in value && (typeof value.code === \"number\" || typeof value.code === \"bigint\") && typeof value.message === \"string\";\n}\n\nexport { SOLANA_ERROR__ACCOUNTS__ACCOUNT_NOT_FOUND, SOLANA_ERROR__ACCOUNTS__EXPECTED_ALL_ACCOUNTS_TO_BE_DECODED, SOLANA_ERROR__ACCOUNTS__EXPECTED_DECODED_ACCOUNT, SOLANA_ERROR__ACCOUNTS__FAILED_TO_DECODE_ACCOUNT, SOLANA_ERROR__ACCOUNTS__ONE_OR_MORE_ACCOUNTS_NOT_FOUND, SOLANA_ERROR__ADDRESSES__FAILED_TO_FIND_VIABLE_PDA_BUMP_SEED, SOLANA_ERROR__ADDRESSES__INVALID_BASE58_ENCODED_ADDRESS, SOLANA_ERROR__ADDRESSES__INVALID_BYTE_LENGTH, SOLANA_ERROR__ADDRESSES__INVALID_ED25519_PUBLIC_KEY, SOLANA_ERROR__ADDRESSES__INVALID_SEEDS_POINT_ON_CURVE, SOLANA_ERROR__ADDRESSES__MALFORMED_PDA, SOLANA_ERROR__ADDRESSES__MAX_NUMBER_OF_PDA_SEEDS_EXCEEDED, SOLANA_ERROR__ADDRESSES__MAX_PDA_SEED_LENGTH_EXCEEDED, SOLANA_ERROR__ADDRESSES__PDA_BUMP_SEED_OUT_OF_RANGE, SOLANA_ERROR__ADDRESSES__PDA_ENDS_WITH_PDA_MARKER, SOLANA_ERROR__ADDRESSES__STRING_LENGTH_OUT_OF_RANGE, SOLANA_ERROR__BLOCKHASH_STRING_LENGTH_OUT_OF_RANGE, SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED, SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY, SOLANA_ERROR__CODECS__CANNOT_USE_LEXICAL_VALUES_AS_ENUM_DISCRIMINATORS, SOLANA_ERROR__CODECS__ENCODED_BYTES_MUST_NOT_INCLUDE_SENTINEL, SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH, SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH, SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH, SOLANA_ERROR__CODECS__ENUM_DISCRIMINATOR_OUT_OF_RANGE, SOLANA_ERROR__CODECS__EXPECTED_FIXED_LENGTH, SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH, SOLANA_ERROR__CODECS__EXPECTED_VARIABLE_LENGTH, SOLANA_ERROR__CODECS__EXPECTED_ZERO_VALUE_TO_MATCH_ITEM_FIXED_SIZE, SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH, SOLANA_ERROR__CODECS__INVALID_CONSTANT, SOLANA_ERROR__CODECS__INVALID_DISCRIMINATED_UNION_VARIANT, SOLANA_ERROR__CODECS__INVALID_ENUM_VARIANT, SOLANA_ERROR__CODECS__INVALID_LITERAL_UNION_VARIANT, SOLANA_ERROR__CODECS__INVALID_NUMBER_OF_ITEMS, SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE, SOLANA_ERROR__CODECS__LITERAL_UNION_DISCRIMINATOR_OUT_OF_RANGE, SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE, SOLANA_ERROR__CODECS__OFFSET_OUT_OF_RANGE, SOLANA_ERROR__CODECS__SENTINEL_MISSING_IN_DECODED_BYTES, SOLANA_ERROR__CODECS__UNION_VARIANT_OUT_OF_RANGE, SOLANA_ERROR__CRYPTO__RANDOM_VALUES_FUNCTION_UNIMPLEMENTED, SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_ALREADY_INITIALIZED, SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_FAILED, SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_OUTSTANDING, SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_SIZE_CHANGED, SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_TOO_SMALL, SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_EXECUTABLE, SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_RENT_EXEMPT, SOLANA_ERROR__INSTRUCTION_ERROR__ARITHMETIC_OVERFLOW, SOLANA_ERROR__INSTRUCTION_ERROR__BORSH_IO_ERROR, SOLANA_ERROR__INSTRUCTION_ERROR__BUILTIN_PROGRAMS_MUST_CONSUME_COMPUTE_UNITS, SOLANA_ERROR__INSTRUCTION_ERROR__CALL_DEPTH, SOLANA_ERROR__INSTRUCTION_ERROR__COMPUTATIONAL_BUDGET_EXCEEDED, SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM, SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_INDEX, SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_OUT_OF_SYNC, SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT, SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_DATA_MODIFIED, SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_LAMPORT_CHANGE, SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_MODIFIED, SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_DATA_MODIFIED, SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_LAMPORT_SPEND, SOLANA_ERROR__INSTRUCTION_ERROR__GENERIC_ERROR, SOLANA_ERROR__INSTRUCTION_ERROR__ILLEGAL_OWNER, SOLANA_ERROR__INSTRUCTION_ERROR__IMMUTABLE, SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_AUTHORITY, SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_PROGRAM_ID, SOLANA_ERROR__INSTRUCTION_ERROR__INSUFFICIENT_FUNDS, SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_DATA, SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_OWNER, SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ARGUMENT, SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ERROR, SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_INSTRUCTION_DATA, SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_REALLOC, SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_SEEDS, SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_DATA_ALLOCATIONS_EXCEEDED, SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_EXCEEDED, SOLANA_ERROR__INSTRUCTION_ERROR__MAX_INSTRUCTION_TRACE_LENGTH_EXCEEDED, SOLANA_ERROR__INSTRUCTION_ERROR__MAX_SEED_LENGTH_EXCEEDED, SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_ACCOUNT, SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_REQUIRED_SIGNATURE, SOLANA_ERROR__INSTRUCTION_ERROR__MODIFIED_PROGRAM_ID, SOLANA_ERROR__INSTRUCTION_ERROR__NOT_ENOUGH_ACCOUNT_KEYS, SOLANA_ERROR__INSTRUCTION_ERROR__PRIVILEGE_ESCALATION, SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_ENVIRONMENT_SETUP_FAILURE, SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPILE, SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPLETE, SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_DATA_MODIFIED, SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_LAMPORT_CHANGE, SOLANA_ERROR__INSTRUCTION_ERROR__REENTRANCY_NOT_ALLOWED, SOLANA_ERROR__INSTRUCTION_ERROR__RENT_EPOCH_MODIFIED, SOLANA_ERROR__INSTRUCTION_ERROR__UNBALANCED_INSTRUCTION, SOLANA_ERROR__INSTRUCTION_ERROR__UNINITIALIZED_ACCOUNT, SOLANA_ERROR__INSTRUCTION_ERROR__UNKNOWN, SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_PROGRAM_ID, SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_SYSVAR, SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_ACCOUNTS, SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_DATA, SOLANA_ERROR__INSTRUCTION__PROGRAM_ID_MISMATCH, SOLANA_ERROR__INVALID_BLOCKHASH_BYTE_LENGTH, SOLANA_ERROR__INVALID_NONCE, SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING, SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED, SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE, SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING, SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE, SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR, SOLANA_ERROR__JSON_RPC__INVALID_PARAMS, SOLANA_ERROR__JSON_RPC__INVALID_REQUEST, SOLANA_ERROR__JSON_RPC__METHOD_NOT_FOUND, SOLANA_ERROR__JSON_RPC__PARSE_ERROR, SOLANA_ERROR__JSON_RPC__SCAN_ERROR, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_CLEANED_UP, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NO_SNAPSHOT, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION, SOLANA_ERROR__KEYS__INVALID_KEY_PAIR_BYTE_LENGTH, SOLANA_ERROR__KEYS__INVALID_PRIVATE_KEY_BYTE_LENGTH, SOLANA_ERROR__KEYS__INVALID_SIGNATURE_BYTE_LENGTH, SOLANA_ERROR__KEYS__PUBLIC_KEY_MUST_MATCH_PRIVATE_KEY, SOLANA_ERROR__KEYS__SIGNATURE_STRING_LENGTH_OUT_OF_RANGE, SOLANA_ERROR__LAMPORTS_OUT_OF_RANGE, SOLANA_ERROR__MALFORMED_BIGINT_STRING, SOLANA_ERROR__MALFORMED_JSON_RPC_ERROR, SOLANA_ERROR__MALFORMED_NUMBER_STRING, SOLANA_ERROR__NONCE_ACCOUNT_NOT_FOUND, SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN, SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED, SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED, SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT, SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID, SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD, SOLANA_ERROR__RPC__INTEGER_OVERFLOW, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR, SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN, SOLANA_ERROR__SIGNER__ADDRESS_CANNOT_HAVE_MULTIPLE_SIGNERS, SOLANA_ERROR__SIGNER__EXPECTED_KEY_PAIR_SIGNER, SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_MODIFYING_SIGNER, SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_PARTIAL_SIGNER, SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_SIGNER, SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_MODIFYING_SIGNER, SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_PARTIAL_SIGNER, SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SENDING_SIGNER, SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SIGNER, SOLANA_ERROR__SIGNER__TRANSACTION_CANNOT_HAVE_MULTIPLE_SENDING_SIGNERS, SOLANA_ERROR__SIGNER__TRANSACTION_SENDING_SIGNER_MISSING, SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED, SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY, SOLANA_ERROR__SUBTLE_CRYPTO__DIGEST_UNIMPLEMENTED, SOLANA_ERROR__SUBTLE_CRYPTO__DISALLOWED_IN_INSECURE_CONTEXT, SOLANA_ERROR__SUBTLE_CRYPTO__ED25519_ALGORITHM_UNIMPLEMENTED, SOLANA_ERROR__SUBTLE_CRYPTO__EXPORT_FUNCTION_UNIMPLEMENTED, SOLANA_ERROR__SUBTLE_CRYPTO__GENERATE_FUNCTION_UNIMPLEMENTED, SOLANA_ERROR__SUBTLE_CRYPTO__SIGN_FUNCTION_UNIMPLEMENTED, SOLANA_ERROR__SUBTLE_CRYPTO__VERIFY_FUNCTION_UNIMPLEMENTED, SOLANA_ERROR__TIMESTAMP_OUT_OF_RANGE, SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_BORROW_OUTSTANDING, SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_IN_USE, SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_LOADED_TWICE, SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_NOT_FOUND, SOLANA_ERROR__TRANSACTION_ERROR__ADDRESS_LOOKUP_TABLE_NOT_FOUND, SOLANA_ERROR__TRANSACTION_ERROR__ALREADY_PROCESSED, SOLANA_ERROR__TRANSACTION_ERROR__BLOCKHASH_NOT_FOUND, SOLANA_ERROR__TRANSACTION_ERROR__CALL_CHAIN_TOO_DEEP, SOLANA_ERROR__TRANSACTION_ERROR__CLUSTER_MAINTENANCE, SOLANA_ERROR__TRANSACTION_ERROR__DUPLICATE_INSTRUCTION, SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_FEE, SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_RENT, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_FOR_FEE, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_INDEX, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_DATA, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_INDEX, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_OWNER, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_PROGRAM_FOR_EXECUTION, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_RENT_PAYING_ACCOUNT, SOLANA_ERROR__TRANSACTION_ERROR__INVALID_WRITABLE_ACCOUNT, SOLANA_ERROR__TRANSACTION_ERROR__MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED, SOLANA_ERROR__TRANSACTION_ERROR__MISSING_SIGNATURE_FOR_FEE, SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_ACCOUNT_NOT_FOUND, SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_EXECUTION_TEMPORARILY_RESTRICTED, SOLANA_ERROR__TRANSACTION_ERROR__RESANITIZATION_NEEDED, SOLANA_ERROR__TRANSACTION_ERROR__SANITIZE_FAILURE, SOLANA_ERROR__TRANSACTION_ERROR__SIGNATURE_FAILURE, SOLANA_ERROR__TRANSACTION_ERROR__TOO_MANY_ACCOUNT_LOCKS, SOLANA_ERROR__TRANSACTION_ERROR__UNBALANCED_TRANSACTION, SOLANA_ERROR__TRANSACTION_ERROR__UNKNOWN, SOLANA_ERROR__TRANSACTION_ERROR__UNSUPPORTED_VERSION, SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT, SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT, SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_ACCOUNT_COST_LIMIT, SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_BLOCK_COST_LIMIT, SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_VOTE_COST_LIMIT, SOLANA_ERROR__TRANSACTION__ADDRESSES_CANNOT_SIGN_TRANSACTION, SOLANA_ERROR__TRANSACTION__ADDRESS_MISSING, SOLANA_ERROR__TRANSACTION__CANNOT_ENCODE_WITH_EMPTY_SIGNATURES, SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME, SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME, SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING, SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE, SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING, SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND, SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT, SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT, SOLANA_ERROR__TRANSACTION__FEE_PAYER_MISSING, SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING, SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_FIRST_INSTRUCTION_MUST_BE_ADVANCE_NONCE, SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_INSTRUCTIONS_MISSING, SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES, SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE, SOLANA_ERROR__TRANSACTION__MESSAGE_SIGNATURES_MISMATCH, SOLANA_ERROR__TRANSACTION__SIGNATURES_MISSING, SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE, SolanaError, getSolanaErrorFromInstructionError, getSolanaErrorFromJsonRpcError, getSolanaErrorFromTransactionError, isSolanaError, safeCaptureStackTrace };\n//# sourceMappingURL=index.browser.mjs.map\n//# sourceMappingURL=index.browser.mjs.map","import { SolanaError, SOLANA_ERROR__CODECS__EXPECTED_FIXED_LENGTH, SOLANA_ERROR__CODECS__EXPECTED_VARIABLE_LENGTH, SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH, SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH, SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH, SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY, SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH, SOLANA_ERROR__CODECS__OFFSET_OUT_OF_RANGE, SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH, SOLANA_ERROR__CODECS__SENTINEL_MISSING_IN_DECODED_BYTES, SOLANA_ERROR__CODECS__ENCODED_BYTES_MUST_NOT_INCLUDE_SENTINEL } from '@solana/errors';\n\n// src/add-codec-sentinel.ts\n\n// src/bytes.ts\nvar mergeBytes = (byteArrays) => {\n const nonEmptyByteArrays = byteArrays.filter((arr) => arr.length);\n if (nonEmptyByteArrays.length === 0) {\n return byteArrays.length ? byteArrays[0] : new Uint8Array();\n }\n if (nonEmptyByteArrays.length === 1) {\n return nonEmptyByteArrays[0];\n }\n const totalLength = nonEmptyByteArrays.reduce((total, arr) => total + arr.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n nonEmptyByteArrays.forEach((arr) => {\n result.set(arr, offset);\n offset += arr.length;\n });\n return result;\n};\nvar padBytes = (bytes, length) => {\n if (bytes.length >= length) return bytes;\n const paddedBytes = new Uint8Array(length).fill(0);\n paddedBytes.set(bytes);\n return paddedBytes;\n};\nvar fixBytes = (bytes, length) => padBytes(bytes.length <= length ? bytes : bytes.slice(0, length), length);\nfunction containsBytes(data, bytes, offset) {\n const slice = offset === 0 && data.length === bytes.length ? data : data.slice(offset, offset + bytes.length);\n if (slice.length !== bytes.length) return false;\n return bytes.every((b, i) => b === slice[i]);\n}\nfunction getEncodedSize(value, encoder) {\n return \"fixedSize\" in encoder ? encoder.fixedSize : encoder.getSizeFromValue(value);\n}\nfunction createEncoder(encoder) {\n return Object.freeze({\n ...encoder,\n encode: (value) => {\n const bytes = new Uint8Array(getEncodedSize(value, encoder));\n encoder.write(value, bytes, 0);\n return bytes;\n }\n });\n}\nfunction createDecoder(decoder) {\n return Object.freeze({\n ...decoder,\n decode: (bytes, offset = 0) => decoder.read(bytes, offset)[0]\n });\n}\nfunction createCodec(codec) {\n return Object.freeze({\n ...codec,\n decode: (bytes, offset = 0) => codec.read(bytes, offset)[0],\n encode: (value) => {\n const bytes = new Uint8Array(getEncodedSize(value, codec));\n codec.write(value, bytes, 0);\n return bytes;\n }\n });\n}\nfunction isFixedSize(codec) {\n return \"fixedSize\" in codec && typeof codec.fixedSize === \"number\";\n}\nfunction assertIsFixedSize(codec) {\n if (!isFixedSize(codec)) {\n throw new SolanaError(SOLANA_ERROR__CODECS__EXPECTED_FIXED_LENGTH);\n }\n}\nfunction isVariableSize(codec) {\n return !isFixedSize(codec);\n}\nfunction assertIsVariableSize(codec) {\n if (!isVariableSize(codec)) {\n throw new SolanaError(SOLANA_ERROR__CODECS__EXPECTED_VARIABLE_LENGTH);\n }\n}\nfunction combineCodec(encoder, decoder) {\n if (isFixedSize(encoder) !== isFixedSize(decoder)) {\n throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH);\n }\n if (isFixedSize(encoder) && isFixedSize(decoder) && encoder.fixedSize !== decoder.fixedSize) {\n throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH, {\n decoderFixedSize: decoder.fixedSize,\n encoderFixedSize: encoder.fixedSize\n });\n }\n if (!isFixedSize(encoder) && !isFixedSize(decoder) && encoder.maxSize !== decoder.maxSize) {\n throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH, {\n decoderMaxSize: decoder.maxSize,\n encoderMaxSize: encoder.maxSize\n });\n }\n return {\n ...decoder,\n ...encoder,\n decode: decoder.decode,\n encode: encoder.encode,\n read: decoder.read,\n write: encoder.write\n };\n}\n\n// src/add-codec-sentinel.ts\nfunction addEncoderSentinel(encoder, sentinel) {\n const write = (value, bytes, offset) => {\n const encoderBytes = encoder.encode(value);\n if (findSentinelIndex(encoderBytes, sentinel) >= 0) {\n throw new SolanaError(SOLANA_ERROR__CODECS__ENCODED_BYTES_MUST_NOT_INCLUDE_SENTINEL, {\n encodedBytes: encoderBytes,\n hexEncodedBytes: hexBytes(encoderBytes),\n hexSentinel: hexBytes(sentinel),\n sentinel\n });\n }\n bytes.set(encoderBytes, offset);\n offset += encoderBytes.length;\n bytes.set(sentinel, offset);\n offset += sentinel.length;\n return offset;\n };\n if (isFixedSize(encoder)) {\n return createEncoder({ ...encoder, fixedSize: encoder.fixedSize + sentinel.length, write });\n }\n return createEncoder({\n ...encoder,\n ...encoder.maxSize != null ? { maxSize: encoder.maxSize + sentinel.length } : {},\n getSizeFromValue: (value) => encoder.getSizeFromValue(value) + sentinel.length,\n write\n });\n}\nfunction addDecoderSentinel(decoder, sentinel) {\n const read = (bytes, offset) => {\n const candidateBytes = offset === 0 ? bytes : bytes.slice(offset);\n const sentinelIndex = findSentinelIndex(candidateBytes, sentinel);\n if (sentinelIndex === -1) {\n throw new SolanaError(SOLANA_ERROR__CODECS__SENTINEL_MISSING_IN_DECODED_BYTES, {\n decodedBytes: candidateBytes,\n hexDecodedBytes: hexBytes(candidateBytes),\n hexSentinel: hexBytes(sentinel),\n sentinel\n });\n }\n const preSentinelBytes = candidateBytes.slice(0, sentinelIndex);\n return [decoder.decode(preSentinelBytes), offset + preSentinelBytes.length + sentinel.length];\n };\n if (isFixedSize(decoder)) {\n return createDecoder({ ...decoder, fixedSize: decoder.fixedSize + sentinel.length, read });\n }\n return createDecoder({\n ...decoder,\n ...decoder.maxSize != null ? { maxSize: decoder.maxSize + sentinel.length } : {},\n read\n });\n}\nfunction addCodecSentinel(codec, sentinel) {\n return combineCodec(addEncoderSentinel(codec, sentinel), addDecoderSentinel(codec, sentinel));\n}\nfunction findSentinelIndex(bytes, sentinel) {\n return bytes.findIndex((byte, index, arr) => {\n if (sentinel.length === 1) return byte === sentinel[0];\n return containsBytes(arr, sentinel, index);\n });\n}\nfunction hexBytes(bytes) {\n return bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, \"0\"), \"\");\n}\nfunction assertByteArrayIsNotEmptyForCodec(codecDescription, bytes, offset = 0) {\n if (bytes.length - offset <= 0) {\n throw new SolanaError(SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY, {\n codecDescription\n });\n }\n}\nfunction assertByteArrayHasEnoughBytesForCodec(codecDescription, expected, bytes, offset = 0) {\n const bytesLength = bytes.length - offset;\n if (bytesLength < expected) {\n throw new SolanaError(SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH, {\n bytesLength,\n codecDescription,\n expected\n });\n }\n}\nfunction assertByteArrayOffsetIsNotOutOfRange(codecDescription, offset, bytesLength) {\n if (offset < 0 || offset > bytesLength) {\n throw new SolanaError(SOLANA_ERROR__CODECS__OFFSET_OUT_OF_RANGE, {\n bytesLength,\n codecDescription,\n offset\n });\n }\n}\n\n// src/add-codec-size-prefix.ts\nfunction addEncoderSizePrefix(encoder, prefix) {\n const write = (value, bytes, offset) => {\n const encoderBytes = encoder.encode(value);\n offset = prefix.write(encoderBytes.length, bytes, offset);\n bytes.set(encoderBytes, offset);\n return offset + encoderBytes.length;\n };\n if (isFixedSize(prefix) && isFixedSize(encoder)) {\n return createEncoder({ ...encoder, fixedSize: prefix.fixedSize + encoder.fixedSize, write });\n }\n const prefixMaxSize = isFixedSize(prefix) ? prefix.fixedSize : prefix.maxSize ?? null;\n const encoderMaxSize = isFixedSize(encoder) ? encoder.fixedSize : encoder.maxSize ?? null;\n const maxSize = prefixMaxSize !== null && encoderMaxSize !== null ? prefixMaxSize + encoderMaxSize : null;\n return createEncoder({\n ...encoder,\n ...maxSize !== null ? { maxSize } : {},\n getSizeFromValue: (value) => {\n const encoderSize = getEncodedSize(value, encoder);\n return getEncodedSize(encoderSize, prefix) + encoderSize;\n },\n write\n });\n}\nfunction addDecoderSizePrefix(decoder, prefix) {\n const read = (bytes, offset) => {\n const [bigintSize, decoderOffset] = prefix.read(bytes, offset);\n const size = Number(bigintSize);\n offset = decoderOffset;\n if (offset > 0 || bytes.length > size) {\n bytes = bytes.slice(offset, offset + size);\n }\n assertByteArrayHasEnoughBytesForCodec(\"addDecoderSizePrefix\", size, bytes);\n return [decoder.decode(bytes), offset + size];\n };\n if (isFixedSize(prefix) && isFixedSize(decoder)) {\n return createDecoder({ ...decoder, fixedSize: prefix.fixedSize + decoder.fixedSize, read });\n }\n const prefixMaxSize = isFixedSize(prefix) ? prefix.fixedSize : prefix.maxSize ?? null;\n const decoderMaxSize = isFixedSize(decoder) ? decoder.fixedSize : decoder.maxSize ?? null;\n const maxSize = prefixMaxSize !== null && decoderMaxSize !== null ? prefixMaxSize + decoderMaxSize : null;\n return createDecoder({ ...decoder, ...maxSize !== null ? { maxSize } : {}, read });\n}\nfunction addCodecSizePrefix(codec, prefix) {\n return combineCodec(addEncoderSizePrefix(codec, prefix), addDecoderSizePrefix(codec, prefix));\n}\n\n// src/fix-codec-size.ts\nfunction fixEncoderSize(encoder, fixedBytes) {\n return createEncoder({\n fixedSize: fixedBytes,\n write: (value, bytes, offset) => {\n const variableByteArray = encoder.encode(value);\n const fixedByteArray = variableByteArray.length > fixedBytes ? variableByteArray.slice(0, fixedBytes) : variableByteArray;\n bytes.set(fixedByteArray, offset);\n return offset + fixedBytes;\n }\n });\n}\nfunction fixDecoderSize(decoder, fixedBytes) {\n return createDecoder({\n fixedSize: fixedBytes,\n read: (bytes, offset) => {\n assertByteArrayHasEnoughBytesForCodec(\"fixCodecSize\", fixedBytes, bytes, offset);\n if (offset > 0 || bytes.length > fixedBytes) {\n bytes = bytes.slice(offset, offset + fixedBytes);\n }\n if (isFixedSize(decoder)) {\n bytes = fixBytes(bytes, decoder.fixedSize);\n }\n const [value] = decoder.read(bytes, 0);\n return [value, offset + fixedBytes];\n }\n });\n}\nfunction fixCodecSize(codec, fixedBytes) {\n return combineCodec(fixEncoderSize(codec, fixedBytes), fixDecoderSize(codec, fixedBytes));\n}\n\n// src/offset-codec.ts\nfunction offsetEncoder(encoder, config) {\n return createEncoder({\n ...encoder,\n write: (value, bytes, preOffset) => {\n const wrapBytes = (offset) => modulo(offset, bytes.length);\n const newPreOffset = config.preOffset ? config.preOffset({ bytes, preOffset, wrapBytes }) : preOffset;\n assertByteArrayOffsetIsNotOutOfRange(\"offsetEncoder\", newPreOffset, bytes.length);\n const postOffset = encoder.write(value, bytes, newPreOffset);\n const newPostOffset = config.postOffset ? config.postOffset({ bytes, newPreOffset, postOffset, preOffset, wrapBytes }) : postOffset;\n assertByteArrayOffsetIsNotOutOfRange(\"offsetEncoder\", newPostOffset, bytes.length);\n return newPostOffset;\n }\n });\n}\nfunction offsetDecoder(decoder, config) {\n return createDecoder({\n ...decoder,\n read: (bytes, preOffset) => {\n const wrapBytes = (offset) => modulo(offset, bytes.length);\n const newPreOffset = config.preOffset ? config.preOffset({ bytes, preOffset, wrapBytes }) : preOffset;\n assertByteArrayOffsetIsNotOutOfRange(\"offsetDecoder\", newPreOffset, bytes.length);\n const [value, postOffset] = decoder.read(bytes, newPreOffset);\n const newPostOffset = config.postOffset ? config.postOffset({ bytes, newPreOffset, postOffset, preOffset, wrapBytes }) : postOffset;\n assertByteArrayOffsetIsNotOutOfRange(\"offsetDecoder\", newPostOffset, bytes.length);\n return [value, newPostOffset];\n }\n });\n}\nfunction offsetCodec(codec, config) {\n return combineCodec(offsetEncoder(codec, config), offsetDecoder(codec, config));\n}\nfunction modulo(dividend, divisor) {\n if (divisor === 0) return 0;\n return (dividend % divisor + divisor) % divisor;\n}\nfunction resizeEncoder(encoder, resize) {\n if (isFixedSize(encoder)) {\n const fixedSize = resize(encoder.fixedSize);\n if (fixedSize < 0) {\n throw new SolanaError(SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH, {\n bytesLength: fixedSize,\n codecDescription: \"resizeEncoder\"\n });\n }\n return createEncoder({ ...encoder, fixedSize });\n }\n return createEncoder({\n ...encoder,\n getSizeFromValue: (value) => {\n const newSize = resize(encoder.getSizeFromValue(value));\n if (newSize < 0) {\n throw new SolanaError(SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH, {\n bytesLength: newSize,\n codecDescription: \"resizeEncoder\"\n });\n }\n return newSize;\n }\n });\n}\nfunction resizeDecoder(decoder, resize) {\n if (isFixedSize(decoder)) {\n const fixedSize = resize(decoder.fixedSize);\n if (fixedSize < 0) {\n throw new SolanaError(SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH, {\n bytesLength: fixedSize,\n codecDescription: \"resizeDecoder\"\n });\n }\n return createDecoder({ ...decoder, fixedSize });\n }\n return decoder;\n}\nfunction resizeCodec(codec, resize) {\n return combineCodec(resizeEncoder(codec, resize), resizeDecoder(codec, resize));\n}\n\n// src/pad-codec.ts\nfunction padLeftEncoder(encoder, offset) {\n return offsetEncoder(\n resizeEncoder(encoder, (size) => size + offset),\n { preOffset: ({ preOffset }) => preOffset + offset }\n );\n}\nfunction padRightEncoder(encoder, offset) {\n return offsetEncoder(\n resizeEncoder(encoder, (size) => size + offset),\n { postOffset: ({ postOffset }) => postOffset + offset }\n );\n}\nfunction padLeftDecoder(decoder, offset) {\n return offsetDecoder(\n resizeDecoder(decoder, (size) => size + offset),\n { preOffset: ({ preOffset }) => preOffset + offset }\n );\n}\nfunction padRightDecoder(decoder, offset) {\n return offsetDecoder(\n resizeDecoder(decoder, (size) => size + offset),\n { postOffset: ({ postOffset }) => postOffset + offset }\n );\n}\nfunction padLeftCodec(codec, offset) {\n return combineCodec(padLeftEncoder(codec, offset), padLeftDecoder(codec, offset));\n}\nfunction padRightCodec(codec, offset) {\n return combineCodec(padRightEncoder(codec, offset), padRightDecoder(codec, offset));\n}\n\n// src/reverse-codec.ts\nfunction copySourceToTargetInReverse(source, target_WILL_MUTATE, sourceOffset, sourceLength, targetOffset = 0) {\n while (sourceOffset < --sourceLength) {\n const leftValue = source[sourceOffset];\n target_WILL_MUTATE[sourceOffset + targetOffset] = source[sourceLength];\n target_WILL_MUTATE[sourceLength + targetOffset] = leftValue;\n sourceOffset++;\n }\n if (sourceOffset === sourceLength) {\n target_WILL_MUTATE[sourceOffset + targetOffset] = source[sourceOffset];\n }\n}\nfunction reverseEncoder(encoder) {\n assertIsFixedSize(encoder);\n return createEncoder({\n ...encoder,\n write: (value, bytes, offset) => {\n const newOffset = encoder.write(value, bytes, offset);\n copySourceToTargetInReverse(\n bytes,\n bytes,\n offset,\n offset + encoder.fixedSize\n );\n return newOffset;\n }\n });\n}\nfunction reverseDecoder(decoder) {\n assertIsFixedSize(decoder);\n return createDecoder({\n ...decoder,\n read: (bytes, offset) => {\n const reversedBytes = bytes.slice();\n copySourceToTargetInReverse(\n bytes,\n reversedBytes,\n offset,\n offset + decoder.fixedSize\n );\n return decoder.read(reversedBytes, offset);\n }\n });\n}\nfunction reverseCodec(codec) {\n return combineCodec(reverseEncoder(codec), reverseDecoder(codec));\n}\n\n// src/transform-codec.ts\nfunction transformEncoder(encoder, unmap) {\n return createEncoder({\n ...isVariableSize(encoder) ? { ...encoder, getSizeFromValue: (value) => encoder.getSizeFromValue(unmap(value)) } : encoder,\n write: (value, bytes, offset) => encoder.write(unmap(value), bytes, offset)\n });\n}\nfunction transformDecoder(decoder, map) {\n return createDecoder({\n ...decoder,\n read: (bytes, offset) => {\n const [value, newOffset] = decoder.read(bytes, offset);\n return [map(value, bytes, offset), newOffset];\n }\n });\n}\nfunction transformCodec(codec, unmap, map) {\n return createCodec({\n ...transformEncoder(codec, unmap),\n read: map ? transformDecoder(codec, map).read : codec.read\n });\n}\n\nexport { addCodecSentinel, addCodecSizePrefix, addDecoderSentinel, addDecoderSizePrefix, addEncoderSentinel, addEncoderSizePrefix, assertByteArrayHasEnoughBytesForCodec, assertByteArrayIsNotEmptyForCodec, assertByteArrayOffsetIsNotOutOfRange, assertIsFixedSize, assertIsVariableSize, combineCodec, containsBytes, createCodec, createDecoder, createEncoder, fixBytes, fixCodecSize, fixDecoderSize, fixEncoderSize, getEncodedSize, isFixedSize, isVariableSize, mergeBytes, offsetCodec, offsetDecoder, offsetEncoder, padBytes, padLeftCodec, padLeftDecoder, padLeftEncoder, padRightCodec, padRightDecoder, padRightEncoder, resizeCodec, resizeDecoder, resizeEncoder, reverseCodec, reverseDecoder, reverseEncoder, transformCodec, transformDecoder, transformEncoder };\n//# sourceMappingURL=index.browser.mjs.map\n//# sourceMappingURL=index.browser.mjs.map","import { SolanaError, SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE } from '@solana/errors';\nimport { combineCodec, createDecoder, createEncoder, assertByteArrayIsNotEmptyForCodec, assertByteArrayHasEnoughBytesForCodec } from '@solana/codecs-core';\n\n// src/assertions.ts\nfunction assertNumberIsBetweenForCodec(codecDescription, min, max, value) {\n if (value < min || value > max) {\n throw new SolanaError(SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE, {\n codecDescription,\n max,\n min,\n value\n });\n }\n}\n\n// src/common.ts\nvar Endian = /* @__PURE__ */ ((Endian2) => {\n Endian2[Endian2[\"Little\"] = 0] = \"Little\";\n Endian2[Endian2[\"Big\"] = 1] = \"Big\";\n return Endian2;\n})(Endian || {});\nfunction isLittleEndian(config) {\n return config?.endian === 1 /* Big */ ? false : true;\n}\nfunction numberEncoderFactory(input) {\n return createEncoder({\n fixedSize: input.size,\n write(value, bytes, offset) {\n if (input.range) {\n assertNumberIsBetweenForCodec(input.name, input.range[0], input.range[1], value);\n }\n const arrayBuffer = new ArrayBuffer(input.size);\n input.set(new DataView(arrayBuffer), value, isLittleEndian(input.config));\n bytes.set(new Uint8Array(arrayBuffer), offset);\n return offset + input.size;\n }\n });\n}\nfunction numberDecoderFactory(input) {\n return createDecoder({\n fixedSize: input.size,\n read(bytes, offset = 0) {\n assertByteArrayIsNotEmptyForCodec(input.name, bytes, offset);\n assertByteArrayHasEnoughBytesForCodec(input.name, input.size, bytes, offset);\n const view = new DataView(toArrayBuffer(bytes, offset, input.size));\n return [input.get(view, isLittleEndian(input.config)), offset + input.size];\n }\n });\n}\nfunction toArrayBuffer(bytes, offset, length) {\n const bytesOffset = bytes.byteOffset + (offset ?? 0);\n const bytesLength = length ?? bytes.byteLength;\n return bytes.buffer.slice(bytesOffset, bytesOffset + bytesLength);\n}\n\n// src/f32.ts\nvar getF32Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"f32\",\n set: (view, value, le) => view.setFloat32(0, Number(value), le),\n size: 4\n});\nvar getF32Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => view.getFloat32(0, le),\n name: \"f32\",\n size: 4\n});\nvar getF32Codec = (config = {}) => combineCodec(getF32Encoder(config), getF32Decoder(config));\nvar getF64Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"f64\",\n set: (view, value, le) => view.setFloat64(0, Number(value), le),\n size: 8\n});\nvar getF64Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => view.getFloat64(0, le),\n name: \"f64\",\n size: 8\n});\nvar getF64Codec = (config = {}) => combineCodec(getF64Encoder(config), getF64Decoder(config));\nvar getI128Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"i128\",\n range: [-BigInt(\"0x7fffffffffffffffffffffffffffffff\") - 1n, BigInt(\"0x7fffffffffffffffffffffffffffffff\")],\n set: (view, value, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const rightMask = 0xffffffffffffffffn;\n view.setBigInt64(leftOffset, BigInt(value) >> 64n, le);\n view.setBigUint64(rightOffset, BigInt(value) & rightMask, le);\n },\n size: 16\n});\nvar getI128Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const left = view.getBigInt64(leftOffset, le);\n const right = view.getBigUint64(rightOffset, le);\n return (left << 64n) + right;\n },\n name: \"i128\",\n size: 16\n});\nvar getI128Codec = (config = {}) => combineCodec(getI128Encoder(config), getI128Decoder(config));\nvar getI16Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"i16\",\n range: [-Number(\"0x7fff\") - 1, Number(\"0x7fff\")],\n set: (view, value, le) => view.setInt16(0, Number(value), le),\n size: 2\n});\nvar getI16Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => view.getInt16(0, le),\n name: \"i16\",\n size: 2\n});\nvar getI16Codec = (config = {}) => combineCodec(getI16Encoder(config), getI16Decoder(config));\nvar getI32Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"i32\",\n range: [-Number(\"0x7fffffff\") - 1, Number(\"0x7fffffff\")],\n set: (view, value, le) => view.setInt32(0, Number(value), le),\n size: 4\n});\nvar getI32Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => view.getInt32(0, le),\n name: \"i32\",\n size: 4\n});\nvar getI32Codec = (config = {}) => combineCodec(getI32Encoder(config), getI32Decoder(config));\nvar getI64Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"i64\",\n range: [-BigInt(\"0x7fffffffffffffff\") - 1n, BigInt(\"0x7fffffffffffffff\")],\n set: (view, value, le) => view.setBigInt64(0, BigInt(value), le),\n size: 8\n});\nvar getI64Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => view.getBigInt64(0, le),\n name: \"i64\",\n size: 8\n});\nvar getI64Codec = (config = {}) => combineCodec(getI64Encoder(config), getI64Decoder(config));\nvar getI8Encoder = () => numberEncoderFactory({\n name: \"i8\",\n range: [-Number(\"0x7f\") - 1, Number(\"0x7f\")],\n set: (view, value) => view.setInt8(0, Number(value)),\n size: 1\n});\nvar getI8Decoder = () => numberDecoderFactory({\n get: (view) => view.getInt8(0),\n name: \"i8\",\n size: 1\n});\nvar getI8Codec = () => combineCodec(getI8Encoder(), getI8Decoder());\nvar getShortU16Encoder = () => createEncoder({\n getSizeFromValue: (value) => {\n if (value <= 127) return 1;\n if (value <= 16383) return 2;\n return 3;\n },\n maxSize: 3,\n write: (value, bytes, offset) => {\n assertNumberIsBetweenForCodec(\"shortU16\", 0, 65535, value);\n const shortU16Bytes = [0];\n for (let ii = 0; ; ii += 1) {\n const alignedValue = Number(value) >> ii * 7;\n if (alignedValue === 0) {\n break;\n }\n const nextSevenBits = 127 & alignedValue;\n shortU16Bytes[ii] = nextSevenBits;\n if (ii > 0) {\n shortU16Bytes[ii - 1] |= 128;\n }\n }\n bytes.set(shortU16Bytes, offset);\n return offset + shortU16Bytes.length;\n }\n});\nvar getShortU16Decoder = () => createDecoder({\n maxSize: 3,\n read: (bytes, offset) => {\n let value = 0;\n let byteCount = 0;\n while (++byteCount) {\n const byteIndex = byteCount - 1;\n const currentByte = bytes[offset + byteIndex];\n const nextSevenBits = 127 & currentByte;\n value |= nextSevenBits << byteIndex * 7;\n if ((currentByte & 128) === 0) {\n break;\n }\n }\n return [value, offset + byteCount];\n }\n});\nvar getShortU16Codec = () => combineCodec(getShortU16Encoder(), getShortU16Decoder());\nvar getU128Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"u128\",\n range: [0n, BigInt(\"0xffffffffffffffffffffffffffffffff\")],\n set: (view, value, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const rightMask = 0xffffffffffffffffn;\n view.setBigUint64(leftOffset, BigInt(value) >> 64n, le);\n view.setBigUint64(rightOffset, BigInt(value) & rightMask, le);\n },\n size: 16\n});\nvar getU128Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => {\n const leftOffset = le ? 8 : 0;\n const rightOffset = le ? 0 : 8;\n const left = view.getBigUint64(leftOffset, le);\n const right = view.getBigUint64(rightOffset, le);\n return (left << 64n) + right;\n },\n name: \"u128\",\n size: 16\n});\nvar getU128Codec = (config = {}) => combineCodec(getU128Encoder(config), getU128Decoder(config));\nvar getU16Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"u16\",\n range: [0, Number(\"0xffff\")],\n set: (view, value, le) => view.setUint16(0, Number(value), le),\n size: 2\n});\nvar getU16Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => view.getUint16(0, le),\n name: \"u16\",\n size: 2\n});\nvar getU16Codec = (config = {}) => combineCodec(getU16Encoder(config), getU16Decoder(config));\nvar getU32Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"u32\",\n range: [0, Number(\"0xffffffff\")],\n set: (view, value, le) => view.setUint32(0, Number(value), le),\n size: 4\n});\nvar getU32Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => view.getUint32(0, le),\n name: \"u32\",\n size: 4\n});\nvar getU32Codec = (config = {}) => combineCodec(getU32Encoder(config), getU32Decoder(config));\nvar getU64Encoder = (config = {}) => numberEncoderFactory({\n config,\n name: \"u64\",\n range: [0n, BigInt(\"0xffffffffffffffff\")],\n set: (view, value, le) => view.setBigUint64(0, BigInt(value), le),\n size: 8\n});\nvar getU64Decoder = (config = {}) => numberDecoderFactory({\n config,\n get: (view, le) => view.getBigUint64(0, le),\n name: \"u64\",\n size: 8\n});\nvar getU64Codec = (config = {}) => combineCodec(getU64Encoder(config), getU64Decoder(config));\nvar getU8Encoder = () => numberEncoderFactory({\n name: \"u8\",\n range: [0, Number(\"0xff\")],\n set: (view, value) => view.setUint8(0, Number(value)),\n size: 1\n});\nvar getU8Decoder = () => numberDecoderFactory({\n get: (view) => view.getUint8(0),\n name: \"u8\",\n size: 1\n});\nvar getU8Codec = () => combineCodec(getU8Encoder(), getU8Decoder());\n\nexport { Endian, assertNumberIsBetweenForCodec, getF32Codec, getF32Decoder, getF32Encoder, getF64Codec, getF64Decoder, getF64Encoder, getI128Codec, getI128Decoder, getI128Encoder, getI16Codec, getI16Decoder, getI16Encoder, getI32Codec, getI32Decoder, getI32Encoder, getI64Codec, getI64Decoder, getI64Encoder, getI8Codec, getI8Decoder, getI8Encoder, getShortU16Codec, getShortU16Decoder, getShortU16Encoder, getU128Codec, getU128Decoder, getU128Encoder, getU16Codec, getU16Decoder, getU16Encoder, getU32Codec, getU32Decoder, getU32Encoder, getU64Codec, getU64Decoder, getU64Encoder, getU8Codec, getU8Decoder, getU8Encoder };\n//# sourceMappingURL=index.browser.mjs.map\n//# sourceMappingURL=index.browser.mjs.map","import {Buffer} from 'buffer';\nimport {blob, Layout} from '@solana/buffer-layout';\nimport {getU64Codec} from '@solana/codecs-numbers';\n\nexport function u64(property?: string): Layout {\n const layout = blob(8 /* bytes */, property);\n const decode = layout.decode.bind(layout);\n const encode = layout.encode.bind(layout);\n\n const bigIntLayout = layout as Layout as Layout;\n const codec = getU64Codec();\n\n bigIntLayout.decode = (buffer: Buffer, offset: number) => {\n const src = decode(buffer as Uint8Array, offset);\n return codec.decode(src);\n };\n\n bigIntLayout.encode = (bigInt: bigint, buffer: Buffer, offset: number) => {\n const src = codec.encode(bigInt) as Uint8Array;\n return encode(src, buffer as Uint8Array, offset);\n };\n\n return bigIntLayout;\n}\n","import * as BufferLayout from '@solana/buffer-layout';\n\nimport {\n encodeData,\n decodeData,\n InstructionType,\n IInstructionInputData,\n} from '../instruction';\nimport * as Layout from '../layout';\nimport {NONCE_ACCOUNT_LENGTH} from '../nonce-account';\nimport {PublicKey} from '../publickey';\nimport {SYSVAR_RECENT_BLOCKHASHES_PUBKEY, SYSVAR_RENT_PUBKEY} from '../sysvar';\nimport {Transaction, TransactionInstruction} from '../transaction';\nimport {toBuffer} from '../utils/to-buffer';\nimport {u64} from '../utils/bigint';\n\n/**\n * Create account system transaction params\n */\nexport type CreateAccountParams = {\n /** The account that will transfer lamports to the created account */\n fromPubkey: PublicKey;\n /** Public key of the created account */\n newAccountPubkey: PublicKey;\n /** Amount of lamports to transfer to the created account */\n lamports: number;\n /** Amount of space in bytes to allocate to the created account */\n space: number;\n /** Public key of the program to assign as the owner of the created account */\n programId: PublicKey;\n};\n\n/**\n * Transfer system transaction params\n */\nexport type TransferParams = {\n /** Account that will transfer lamports */\n fromPubkey: PublicKey;\n /** Account that will receive transferred lamports */\n toPubkey: PublicKey;\n /** Amount of lamports to transfer */\n lamports: number | bigint;\n};\n\n/**\n * Assign system transaction params\n */\nexport type AssignParams = {\n /** Public key of the account which will be assigned a new owner */\n accountPubkey: PublicKey;\n /** Public key of the program to assign as the owner */\n programId: PublicKey;\n};\n\n/**\n * Create account with seed system transaction params\n */\nexport type CreateAccountWithSeedParams = {\n /** The account that will transfer lamports to the created account */\n fromPubkey: PublicKey;\n /** Public key of the created account. Must be pre-calculated with PublicKey.createWithSeed() */\n newAccountPubkey: PublicKey;\n /** Base public key to use to derive the address of the created account. Must be the same as the base key used to create `newAccountPubkey` */\n basePubkey: PublicKey;\n /** Seed to use to derive the address of the created account. Must be the same as the seed used to create `newAccountPubkey` */\n seed: string;\n /** Amount of lamports to transfer to the created account */\n lamports: number;\n /** Amount of space in bytes to allocate to the created account */\n space: number;\n /** Public key of the program to assign as the owner of the created account */\n programId: PublicKey;\n};\n\n/**\n * Create nonce account system transaction params\n */\nexport type CreateNonceAccountParams = {\n /** The account that will transfer lamports to the created nonce account */\n fromPubkey: PublicKey;\n /** Public key of the created nonce account */\n noncePubkey: PublicKey;\n /** Public key to set as authority of the created nonce account */\n authorizedPubkey: PublicKey;\n /** Amount of lamports to transfer to the created nonce account */\n lamports: number;\n};\n\n/**\n * Create nonce account with seed system transaction params\n */\nexport type CreateNonceAccountWithSeedParams = {\n /** The account that will transfer lamports to the created nonce account */\n fromPubkey: PublicKey;\n /** Public key of the created nonce account */\n noncePubkey: PublicKey;\n /** Public key to set as authority of the created nonce account */\n authorizedPubkey: PublicKey;\n /** Amount of lamports to transfer to the created nonce account */\n lamports: number;\n /** Base public key to use to derive the address of the nonce account */\n basePubkey: PublicKey;\n /** Seed to use to derive the address of the nonce account */\n seed: string;\n};\n\n/**\n * Initialize nonce account system instruction params\n */\nexport type InitializeNonceParams = {\n /** Nonce account which will be initialized */\n noncePubkey: PublicKey;\n /** Public key to set as authority of the initialized nonce account */\n authorizedPubkey: PublicKey;\n};\n\n/**\n * Advance nonce account system instruction params\n */\nexport type AdvanceNonceParams = {\n /** Nonce account */\n noncePubkey: PublicKey;\n /** Public key of the nonce authority */\n authorizedPubkey: PublicKey;\n};\n\n/**\n * Withdraw nonce account system transaction params\n */\nexport type WithdrawNonceParams = {\n /** Nonce account */\n noncePubkey: PublicKey;\n /** Public key of the nonce authority */\n authorizedPubkey: PublicKey;\n /** Public key of the account which will receive the withdrawn nonce account balance */\n toPubkey: PublicKey;\n /** Amount of lamports to withdraw from the nonce account */\n lamports: number;\n};\n\n/**\n * Authorize nonce account system transaction params\n */\nexport type AuthorizeNonceParams = {\n /** Nonce account */\n noncePubkey: PublicKey;\n /** Public key of the current nonce authority */\n authorizedPubkey: PublicKey;\n /** Public key to set as the new nonce authority */\n newAuthorizedPubkey: PublicKey;\n};\n\n/**\n * Allocate account system transaction params\n */\nexport type AllocateParams = {\n /** Account to allocate */\n accountPubkey: PublicKey;\n /** Amount of space in bytes to allocate */\n space: number;\n};\n\n/**\n * Allocate account with seed system transaction params\n */\nexport type AllocateWithSeedParams = {\n /** Account to allocate */\n accountPubkey: PublicKey;\n /** Base public key to use to derive the address of the allocated account */\n basePubkey: PublicKey;\n /** Seed to use to derive the address of the allocated account */\n seed: string;\n /** Amount of space in bytes to allocate */\n space: number;\n /** Public key of the program to assign as the owner of the allocated account */\n programId: PublicKey;\n};\n\n/**\n * Assign account with seed system transaction params\n */\nexport type AssignWithSeedParams = {\n /** Public key of the account which will be assigned a new owner */\n accountPubkey: PublicKey;\n /** Base public key to use to derive the address of the assigned account */\n basePubkey: PublicKey;\n /** Seed to use to derive the address of the assigned account */\n seed: string;\n /** Public key of the program to assign as the owner */\n programId: PublicKey;\n};\n\n/**\n * Transfer with seed system transaction params\n */\nexport type TransferWithSeedParams = {\n /** Account that will transfer lamports */\n fromPubkey: PublicKey;\n /** Base public key to use to derive the funding account address */\n basePubkey: PublicKey;\n /** Account that will receive transferred lamports */\n toPubkey: PublicKey;\n /** Amount of lamports to transfer */\n lamports: number | bigint;\n /** Seed to use to derive the funding account address */\n seed: string;\n /** Program id to use to derive the funding account address */\n programId: PublicKey;\n};\n\n/** Decoded transfer system transaction instruction */\nexport type DecodedTransferInstruction = {\n /** Account that will transfer lamports */\n fromPubkey: PublicKey;\n /** Account that will receive transferred lamports */\n toPubkey: PublicKey;\n /** Amount of lamports to transfer */\n lamports: bigint;\n};\n\n/** Decoded transferWithSeed system transaction instruction */\nexport type DecodedTransferWithSeedInstruction = {\n /** Account that will transfer lamports */\n fromPubkey: PublicKey;\n /** Base public key to use to derive the funding account address */\n basePubkey: PublicKey;\n /** Account that will receive transferred lamports */\n toPubkey: PublicKey;\n /** Amount of lamports to transfer */\n lamports: bigint;\n /** Seed to use to derive the funding account address */\n seed: string;\n /** Program id to use to derive the funding account address */\n programId: PublicKey;\n};\n\n/**\n * System Instruction class\n */\nexport class SystemInstruction {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Decode a system instruction and retrieve the instruction type.\n */\n static decodeInstructionType(\n instruction: TransactionInstruction,\n ): SystemInstructionType {\n this.checkProgramId(instruction.programId);\n\n const instructionTypeLayout = BufferLayout.u32('instruction');\n const typeIndex = instructionTypeLayout.decode(instruction.data);\n\n let type: SystemInstructionType | undefined;\n for (const [ixType, layout] of Object.entries(SYSTEM_INSTRUCTION_LAYOUTS)) {\n if (layout.index == typeIndex) {\n type = ixType as SystemInstructionType;\n break;\n }\n }\n\n if (!type) {\n throw new Error('Instruction type incorrect; not a SystemInstruction');\n }\n\n return type;\n }\n\n /**\n * Decode a create account system instruction and retrieve the instruction params.\n */\n static decodeCreateAccount(\n instruction: TransactionInstruction,\n ): CreateAccountParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {lamports, space, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.Create,\n instruction.data,\n );\n\n return {\n fromPubkey: instruction.keys[0].pubkey,\n newAccountPubkey: instruction.keys[1].pubkey,\n lamports,\n space,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode a transfer system instruction and retrieve the instruction params.\n */\n static decodeTransfer(\n instruction: TransactionInstruction,\n ): DecodedTransferInstruction {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {lamports} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.Transfer,\n instruction.data,\n );\n\n return {\n fromPubkey: instruction.keys[0].pubkey,\n toPubkey: instruction.keys[1].pubkey,\n lamports,\n };\n }\n\n /**\n * Decode a transfer with seed system instruction and retrieve the instruction params.\n */\n static decodeTransferWithSeed(\n instruction: TransactionInstruction,\n ): DecodedTransferWithSeedInstruction {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n\n const {lamports, seed, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.TransferWithSeed,\n instruction.data,\n );\n\n return {\n fromPubkey: instruction.keys[0].pubkey,\n basePubkey: instruction.keys[1].pubkey,\n toPubkey: instruction.keys[2].pubkey,\n lamports,\n seed,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode an allocate system instruction and retrieve the instruction params.\n */\n static decodeAllocate(instruction: TransactionInstruction): AllocateParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 1);\n\n const {space} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.Allocate,\n instruction.data,\n );\n\n return {\n accountPubkey: instruction.keys[0].pubkey,\n space,\n };\n }\n\n /**\n * Decode an allocate with seed system instruction and retrieve the instruction params.\n */\n static decodeAllocateWithSeed(\n instruction: TransactionInstruction,\n ): AllocateWithSeedParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 1);\n\n const {base, seed, space, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.AllocateWithSeed,\n instruction.data,\n );\n\n return {\n accountPubkey: instruction.keys[0].pubkey,\n basePubkey: new PublicKey(base),\n seed,\n space,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode an assign system instruction and retrieve the instruction params.\n */\n static decodeAssign(instruction: TransactionInstruction): AssignParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 1);\n\n const {programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.Assign,\n instruction.data,\n );\n\n return {\n accountPubkey: instruction.keys[0].pubkey,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode an assign with seed system instruction and retrieve the instruction params.\n */\n static decodeAssignWithSeed(\n instruction: TransactionInstruction,\n ): AssignWithSeedParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 1);\n\n const {base, seed, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.AssignWithSeed,\n instruction.data,\n );\n\n return {\n accountPubkey: instruction.keys[0].pubkey,\n basePubkey: new PublicKey(base),\n seed,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode a create account with seed system instruction and retrieve the instruction params.\n */\n static decodeCreateWithSeed(\n instruction: TransactionInstruction,\n ): CreateAccountWithSeedParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {base, seed, lamports, space, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.CreateWithSeed,\n instruction.data,\n );\n\n return {\n fromPubkey: instruction.keys[0].pubkey,\n newAccountPubkey: instruction.keys[1].pubkey,\n basePubkey: new PublicKey(base),\n seed,\n lamports,\n space,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode a nonce initialize system instruction and retrieve the instruction params.\n */\n static decodeNonceInitialize(\n instruction: TransactionInstruction,\n ): InitializeNonceParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n\n const {authorized} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.InitializeNonceAccount,\n instruction.data,\n );\n\n return {\n noncePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: new PublicKey(authorized),\n };\n }\n\n /**\n * Decode a nonce advance system instruction and retrieve the instruction params.\n */\n static decodeNonceAdvance(\n instruction: TransactionInstruction,\n ): AdvanceNonceParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n\n decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.AdvanceNonceAccount,\n instruction.data,\n );\n\n return {\n noncePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n };\n }\n\n /**\n * Decode a nonce withdraw system instruction and retrieve the instruction params.\n */\n static decodeNonceWithdraw(\n instruction: TransactionInstruction,\n ): WithdrawNonceParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 5);\n\n const {lamports} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.WithdrawNonceAccount,\n instruction.data,\n );\n\n return {\n noncePubkey: instruction.keys[0].pubkey,\n toPubkey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[4].pubkey,\n lamports,\n };\n }\n\n /**\n * Decode a nonce authorize system instruction and retrieve the instruction params.\n */\n static decodeNonceAuthorize(\n instruction: TransactionInstruction,\n ): AuthorizeNonceParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {authorized} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.AuthorizeNonceAccount,\n instruction.data,\n );\n\n return {\n noncePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[1].pubkey,\n newAuthorizedPubkey: new PublicKey(authorized),\n };\n }\n\n /**\n * @internal\n */\n static checkProgramId(programId: PublicKey) {\n if (!programId.equals(SystemProgram.programId)) {\n throw new Error('invalid instruction; programId is not SystemProgram');\n }\n }\n\n /**\n * @internal\n */\n static checkKeyLength(keys: Array, expectedLength: number) {\n if (keys.length < expectedLength) {\n throw new Error(\n `invalid instruction; found ${keys.length} keys, expected at least ${expectedLength}`,\n );\n }\n }\n}\n\n/**\n * An enumeration of valid SystemInstructionType's\n */\nexport type SystemInstructionType =\n // FIXME\n // It would be preferable for this type to be `keyof SystemInstructionInputData`\n // but Typedoc does not transpile `keyof` expressions.\n // See https://github.com/TypeStrong/typedoc/issues/1894\n | 'AdvanceNonceAccount'\n | 'Allocate'\n | 'AllocateWithSeed'\n | 'Assign'\n | 'AssignWithSeed'\n | 'AuthorizeNonceAccount'\n | 'Create'\n | 'CreateWithSeed'\n | 'InitializeNonceAccount'\n | 'Transfer'\n | 'TransferWithSeed'\n | 'WithdrawNonceAccount'\n | 'UpgradeNonceAccount';\n\ntype SystemInstructionInputData = {\n AdvanceNonceAccount: IInstructionInputData;\n Allocate: IInstructionInputData & {\n space: number;\n };\n AllocateWithSeed: IInstructionInputData & {\n base: Uint8Array;\n programId: Uint8Array;\n seed: string;\n space: number;\n };\n Assign: IInstructionInputData & {\n programId: Uint8Array;\n };\n AssignWithSeed: IInstructionInputData & {\n base: Uint8Array;\n seed: string;\n programId: Uint8Array;\n };\n AuthorizeNonceAccount: IInstructionInputData & {\n authorized: Uint8Array;\n };\n Create: IInstructionInputData & {\n lamports: number;\n programId: Uint8Array;\n space: number;\n };\n CreateWithSeed: IInstructionInputData & {\n base: Uint8Array;\n lamports: number;\n programId: Uint8Array;\n seed: string;\n space: number;\n };\n InitializeNonceAccount: IInstructionInputData & {\n authorized: Uint8Array;\n };\n Transfer: IInstructionInputData & {\n lamports: bigint;\n };\n TransferWithSeed: IInstructionInputData & {\n lamports: bigint;\n programId: Uint8Array;\n seed: string;\n };\n WithdrawNonceAccount: IInstructionInputData & {\n lamports: number;\n };\n UpgradeNonceAccount: IInstructionInputData;\n};\n\n/**\n * An enumeration of valid system InstructionType's\n * @internal\n */\nexport const SYSTEM_INSTRUCTION_LAYOUTS = Object.freeze<{\n [Instruction in SystemInstructionType]: InstructionType<\n SystemInstructionInputData[Instruction]\n >;\n}>({\n Create: {\n index: 0,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n BufferLayout.ns64('space'),\n Layout.publicKey('programId'),\n ]),\n },\n Assign: {\n index: 1,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('programId'),\n ]),\n },\n Transfer: {\n index: 2,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n u64('lamports'),\n ]),\n },\n CreateWithSeed: {\n index: 3,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('base'),\n Layout.rustString('seed'),\n BufferLayout.ns64('lamports'),\n BufferLayout.ns64('space'),\n Layout.publicKey('programId'),\n ]),\n },\n AdvanceNonceAccount: {\n index: 4,\n layout: BufferLayout.struct<\n SystemInstructionInputData['AdvanceNonceAccount']\n >([BufferLayout.u32('instruction')]),\n },\n WithdrawNonceAccount: {\n index: 5,\n layout: BufferLayout.struct<\n SystemInstructionInputData['WithdrawNonceAccount']\n >([BufferLayout.u32('instruction'), BufferLayout.ns64('lamports')]),\n },\n InitializeNonceAccount: {\n index: 6,\n layout: BufferLayout.struct<\n SystemInstructionInputData['InitializeNonceAccount']\n >([BufferLayout.u32('instruction'), Layout.publicKey('authorized')]),\n },\n AuthorizeNonceAccount: {\n index: 7,\n layout: BufferLayout.struct<\n SystemInstructionInputData['AuthorizeNonceAccount']\n >([BufferLayout.u32('instruction'), Layout.publicKey('authorized')]),\n },\n Allocate: {\n index: 8,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('space'),\n ]),\n },\n AllocateWithSeed: {\n index: 9,\n layout: BufferLayout.struct(\n [\n BufferLayout.u32('instruction'),\n Layout.publicKey('base'),\n Layout.rustString('seed'),\n BufferLayout.ns64('space'),\n Layout.publicKey('programId'),\n ],\n ),\n },\n AssignWithSeed: {\n index: 10,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('base'),\n Layout.rustString('seed'),\n Layout.publicKey('programId'),\n ]),\n },\n TransferWithSeed: {\n index: 11,\n layout: BufferLayout.struct(\n [\n BufferLayout.u32('instruction'),\n u64('lamports'),\n Layout.rustString('seed'),\n Layout.publicKey('programId'),\n ],\n ),\n },\n UpgradeNonceAccount: {\n index: 12,\n layout: BufferLayout.struct<\n SystemInstructionInputData['UpgradeNonceAccount']\n >([BufferLayout.u32('instruction')]),\n },\n});\n\n/**\n * Factory class for transactions to interact with the System program\n */\nexport class SystemProgram {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Public key that identifies the System program\n */\n static programId: PublicKey = new PublicKey(\n '11111111111111111111111111111111',\n );\n\n /**\n * Generate a transaction instruction that creates a new account\n */\n static createAccount(params: CreateAccountParams): TransactionInstruction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.Create;\n const data = encodeData(type, {\n lamports: params.lamports,\n space: params.space,\n programId: toBuffer(params.programId.toBuffer()),\n });\n\n return new TransactionInstruction({\n keys: [\n {pubkey: params.fromPubkey, isSigner: true, isWritable: true},\n {pubkey: params.newAccountPubkey, isSigner: true, isWritable: true},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction instruction that transfers lamports from one account to another\n */\n static transfer(\n params: TransferParams | TransferWithSeedParams,\n ): TransactionInstruction {\n let data;\n let keys;\n if ('basePubkey' in params) {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.TransferWithSeed;\n data = encodeData(type, {\n lamports: BigInt(params.lamports),\n seed: params.seed,\n programId: toBuffer(params.programId.toBuffer()),\n });\n keys = [\n {pubkey: params.fromPubkey, isSigner: false, isWritable: true},\n {pubkey: params.basePubkey, isSigner: true, isWritable: false},\n {pubkey: params.toPubkey, isSigner: false, isWritable: true},\n ];\n } else {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.Transfer;\n data = encodeData(type, {lamports: BigInt(params.lamports)});\n keys = [\n {pubkey: params.fromPubkey, isSigner: true, isWritable: true},\n {pubkey: params.toPubkey, isSigner: false, isWritable: true},\n ];\n }\n\n return new TransactionInstruction({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction instruction that assigns an account to a program\n */\n static assign(\n params: AssignParams | AssignWithSeedParams,\n ): TransactionInstruction {\n let data;\n let keys;\n if ('basePubkey' in params) {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.AssignWithSeed;\n data = encodeData(type, {\n base: toBuffer(params.basePubkey.toBuffer()),\n seed: params.seed,\n programId: toBuffer(params.programId.toBuffer()),\n });\n keys = [\n {pubkey: params.accountPubkey, isSigner: false, isWritable: true},\n {pubkey: params.basePubkey, isSigner: true, isWritable: false},\n ];\n } else {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.Assign;\n data = encodeData(type, {\n programId: toBuffer(params.programId.toBuffer()),\n });\n keys = [{pubkey: params.accountPubkey, isSigner: true, isWritable: true}];\n }\n\n return new TransactionInstruction({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction instruction that creates a new account at\n * an address generated with `from`, a seed, and programId\n */\n static createAccountWithSeed(\n params: CreateAccountWithSeedParams,\n ): TransactionInstruction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.CreateWithSeed;\n const data = encodeData(type, {\n base: toBuffer(params.basePubkey.toBuffer()),\n seed: params.seed,\n lamports: params.lamports,\n space: params.space,\n programId: toBuffer(params.programId.toBuffer()),\n });\n let keys = [\n {pubkey: params.fromPubkey, isSigner: true, isWritable: true},\n {pubkey: params.newAccountPubkey, isSigner: false, isWritable: true},\n ];\n if (!params.basePubkey.equals(params.fromPubkey)) {\n keys.push({\n pubkey: params.basePubkey,\n isSigner: true,\n isWritable: false,\n });\n }\n\n return new TransactionInstruction({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction that creates a new Nonce account\n */\n static createNonceAccount(\n params: CreateNonceAccountParams | CreateNonceAccountWithSeedParams,\n ): Transaction {\n const transaction = new Transaction();\n if ('basePubkey' in params && 'seed' in params) {\n transaction.add(\n SystemProgram.createAccountWithSeed({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.noncePubkey,\n basePubkey: params.basePubkey,\n seed: params.seed,\n lamports: params.lamports,\n space: NONCE_ACCOUNT_LENGTH,\n programId: this.programId,\n }),\n );\n } else {\n transaction.add(\n SystemProgram.createAccount({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.noncePubkey,\n lamports: params.lamports,\n space: NONCE_ACCOUNT_LENGTH,\n programId: this.programId,\n }),\n );\n }\n\n const initParams = {\n noncePubkey: params.noncePubkey,\n authorizedPubkey: params.authorizedPubkey,\n };\n\n transaction.add(this.nonceInitialize(initParams));\n return transaction;\n }\n\n /**\n * Generate an instruction to initialize a Nonce account\n */\n static nonceInitialize(\n params: InitializeNonceParams,\n ): TransactionInstruction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.InitializeNonceAccount;\n const data = encodeData(type, {\n authorized: toBuffer(params.authorizedPubkey.toBuffer()),\n });\n const instructionData = {\n keys: [\n {pubkey: params.noncePubkey, isSigner: false, isWritable: true},\n {\n pubkey: SYSVAR_RECENT_BLOCKHASHES_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false},\n ],\n programId: this.programId,\n data,\n };\n return new TransactionInstruction(instructionData);\n }\n\n /**\n * Generate an instruction to advance the nonce in a Nonce account\n */\n static nonceAdvance(params: AdvanceNonceParams): TransactionInstruction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.AdvanceNonceAccount;\n const data = encodeData(type);\n const instructionData = {\n keys: [\n {pubkey: params.noncePubkey, isSigner: false, isWritable: true},\n {\n pubkey: SYSVAR_RECENT_BLOCKHASHES_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: params.authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n };\n return new TransactionInstruction(instructionData);\n }\n\n /**\n * Generate a transaction instruction that withdraws lamports from a Nonce account\n */\n static nonceWithdraw(params: WithdrawNonceParams): TransactionInstruction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.WithdrawNonceAccount;\n const data = encodeData(type, {lamports: params.lamports});\n\n return new TransactionInstruction({\n keys: [\n {pubkey: params.noncePubkey, isSigner: false, isWritable: true},\n {pubkey: params.toPubkey, isSigner: false, isWritable: true},\n {\n pubkey: SYSVAR_RECENT_BLOCKHASHES_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {\n pubkey: SYSVAR_RENT_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: params.authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction instruction that authorizes a new PublicKey as the authority\n * on a Nonce account.\n */\n static nonceAuthorize(params: AuthorizeNonceParams): TransactionInstruction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.AuthorizeNonceAccount;\n const data = encodeData(type, {\n authorized: toBuffer(params.newAuthorizedPubkey.toBuffer()),\n });\n\n return new TransactionInstruction({\n keys: [\n {pubkey: params.noncePubkey, isSigner: false, isWritable: true},\n {pubkey: params.authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction instruction that allocates space in an account without funding\n */\n static allocate(\n params: AllocateParams | AllocateWithSeedParams,\n ): TransactionInstruction {\n let data;\n let keys;\n if ('basePubkey' in params) {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.AllocateWithSeed;\n data = encodeData(type, {\n base: toBuffer(params.basePubkey.toBuffer()),\n seed: params.seed,\n space: params.space,\n programId: toBuffer(params.programId.toBuffer()),\n });\n keys = [\n {pubkey: params.accountPubkey, isSigner: false, isWritable: true},\n {pubkey: params.basePubkey, isSigner: true, isWritable: false},\n ];\n } else {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.Allocate;\n data = encodeData(type, {\n space: params.space,\n });\n keys = [{pubkey: params.accountPubkey, isSigner: true, isWritable: true}];\n }\n\n return new TransactionInstruction({\n keys,\n programId: this.programId,\n data,\n });\n }\n}\n","import {Buffer} from 'buffer';\nimport * as BufferLayout from '@solana/buffer-layout';\n\nimport {PublicKey} from './publickey';\nimport {Transaction, PACKET_DATA_SIZE} from './transaction';\nimport {MS_PER_SLOT} from './timing';\nimport {SYSVAR_RENT_PUBKEY} from './sysvar';\nimport {sendAndConfirmTransaction} from './utils/send-and-confirm-transaction';\nimport {sleep} from './utils/sleep';\nimport type {Connection} from './connection';\nimport type {Signer} from './keypair';\nimport {SystemProgram} from './programs/system';\nimport {IInstructionInputData} from './instruction';\n\n// Keep program chunks under PACKET_DATA_SIZE, leaving enough room for the\n// rest of the Transaction fields\n//\n// TODO: replace 300 with a proper constant for the size of the other\n// Transaction fields\nconst CHUNK_SIZE = PACKET_DATA_SIZE - 300;\n\n/**\n * Program loader interface\n */\nexport class Loader {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Amount of program data placed in each load Transaction\n */\n static chunkSize: number = CHUNK_SIZE;\n\n /**\n * Minimum number of signatures required to load a program not including\n * retries\n *\n * Can be used to calculate transaction fees\n */\n static getMinNumSignatures(dataLength: number): number {\n return (\n 2 * // Every transaction requires two signatures (payer + program)\n (Math.ceil(dataLength / Loader.chunkSize) +\n 1 + // Add one for Create transaction\n 1) // Add one for Finalize transaction\n );\n }\n\n /**\n * Loads a generic program\n *\n * @param connection The connection to use\n * @param payer System account that pays to load the program\n * @param program Account to load the program into\n * @param programId Public key that identifies the loader\n * @param data Program octets\n * @return true if program was loaded successfully, false if program was already loaded\n */\n static async load(\n connection: Connection,\n payer: Signer,\n program: Signer,\n programId: PublicKey,\n data: Buffer | Uint8Array | Array,\n ): Promise {\n {\n const balanceNeeded = await connection.getMinimumBalanceForRentExemption(\n data.length,\n );\n\n // Fetch program account info to check if it has already been created\n const programInfo = await connection.getAccountInfo(\n program.publicKey,\n 'confirmed',\n );\n\n let transaction: Transaction | null = null;\n if (programInfo !== null) {\n if (programInfo.executable) {\n console.error('Program load failed, account is already executable');\n return false;\n }\n\n if (programInfo.data.length !== data.length) {\n transaction = transaction || new Transaction();\n transaction.add(\n SystemProgram.allocate({\n accountPubkey: program.publicKey,\n space: data.length,\n }),\n );\n }\n\n if (!programInfo.owner.equals(programId)) {\n transaction = transaction || new Transaction();\n transaction.add(\n SystemProgram.assign({\n accountPubkey: program.publicKey,\n programId,\n }),\n );\n }\n\n if (programInfo.lamports < balanceNeeded) {\n transaction = transaction || new Transaction();\n transaction.add(\n SystemProgram.transfer({\n fromPubkey: payer.publicKey,\n toPubkey: program.publicKey,\n lamports: balanceNeeded - programInfo.lamports,\n }),\n );\n }\n } else {\n transaction = new Transaction().add(\n SystemProgram.createAccount({\n fromPubkey: payer.publicKey,\n newAccountPubkey: program.publicKey,\n lamports: balanceNeeded > 0 ? balanceNeeded : 1,\n space: data.length,\n programId,\n }),\n );\n }\n\n // If the account is already created correctly, skip this step\n // and proceed directly to loading instructions\n if (transaction !== null) {\n await sendAndConfirmTransaction(\n connection,\n transaction,\n [payer, program],\n {\n commitment: 'confirmed',\n },\n );\n }\n }\n\n const dataLayout = BufferLayout.struct<\n Readonly<{\n bytes: number[];\n bytesLength: number;\n bytesLengthPadding: number;\n instruction: number;\n offset: number;\n }>\n >([\n BufferLayout.u32('instruction'),\n BufferLayout.u32('offset'),\n BufferLayout.u32('bytesLength'),\n BufferLayout.u32('bytesLengthPadding'),\n BufferLayout.seq(\n BufferLayout.u8('byte'),\n BufferLayout.offset(BufferLayout.u32(), -8),\n 'bytes',\n ),\n ]);\n\n const chunkSize = Loader.chunkSize;\n let offset = 0;\n let array = data;\n let transactions = [];\n while (array.length > 0) {\n const bytes = array.slice(0, chunkSize);\n const data = Buffer.alloc(chunkSize + 16);\n dataLayout.encode(\n {\n instruction: 0, // Load instruction\n offset,\n bytes: bytes as number[],\n bytesLength: 0,\n bytesLengthPadding: 0,\n },\n data,\n );\n\n const transaction = new Transaction().add({\n keys: [{pubkey: program.publicKey, isSigner: true, isWritable: true}],\n programId,\n data,\n });\n transactions.push(\n sendAndConfirmTransaction(connection, transaction, [payer, program], {\n commitment: 'confirmed',\n }),\n );\n\n // Delay between sends in an attempt to reduce rate limit errors\n if (connection._rpcEndpoint.includes('solana.com')) {\n const REQUESTS_PER_SECOND = 4;\n await sleep(1000 / REQUESTS_PER_SECOND);\n }\n\n offset += chunkSize;\n array = array.slice(chunkSize);\n }\n await Promise.all(transactions);\n\n // Finalize the account loaded with program data for execution\n {\n const dataLayout = BufferLayout.struct([\n BufferLayout.u32('instruction'),\n ]);\n\n const data = Buffer.alloc(dataLayout.span);\n dataLayout.encode(\n {\n instruction: 1, // Finalize instruction\n },\n data,\n );\n\n const transaction = new Transaction().add({\n keys: [\n {pubkey: program.publicKey, isSigner: true, isWritable: true},\n {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false},\n ],\n programId,\n data,\n });\n const deployCommitment = 'processed';\n const finalizeSignature = await connection.sendTransaction(\n transaction,\n [payer, program],\n {preflightCommitment: deployCommitment},\n );\n const {context, value} = await connection.confirmTransaction(\n {\n signature: finalizeSignature,\n lastValidBlockHeight: transaction.lastValidBlockHeight!,\n blockhash: transaction.recentBlockhash!,\n },\n deployCommitment,\n );\n if (value.err) {\n throw new Error(\n `Transaction ${finalizeSignature} failed (${JSON.stringify(value)})`,\n );\n }\n // We prevent programs from being usable until the slot after their deployment.\n // See https://github.com/solana-labs/solana/pull/29654\n while (\n true // eslint-disable-line no-constant-condition\n ) {\n try {\n const currentSlot = await connection.getSlot({\n commitment: deployCommitment,\n });\n if (currentSlot > context.slot) {\n break;\n }\n } catch {\n /* empty */\n }\n await new Promise(resolve =>\n setTimeout(resolve, Math.round(MS_PER_SLOT / 2)),\n );\n }\n }\n\n // success\n return true;\n }\n}\n","import type {Buffer} from 'buffer';\n\nimport {PublicKey} from './publickey';\nimport {Loader} from './loader';\nimport type {Connection} from './connection';\nimport type {Signer} from './keypair';\n\n/**\n * @deprecated Deprecated since Solana v1.17.20.\n */\nexport const BPF_LOADER_PROGRAM_ID = new PublicKey(\n 'BPFLoader2111111111111111111111111111111111',\n);\n\n/**\n * Factory class for transactions to interact with a program loader\n *\n * @deprecated Deprecated since Solana v1.17.20.\n */\nexport class BpfLoader {\n /**\n * Minimum number of signatures required to load a program not including\n * retries\n *\n * Can be used to calculate transaction fees\n */\n static getMinNumSignatures(dataLength: number): number {\n return Loader.getMinNumSignatures(dataLength);\n }\n\n /**\n * Load a SBF program\n *\n * @param connection The connection to use\n * @param payer Account that will pay program loading fees\n * @param program Account to load the program into\n * @param elf The entire ELF containing the SBF program\n * @param loaderProgramId The program id of the BPF loader to use\n * @return true if program was loaded successfully, false if program was already loaded\n */\n static load(\n connection: Connection,\n payer: Signer,\n program: Signer,\n elf: Buffer | Uint8Array | Array,\n loaderProgramId: PublicKey,\n ): Promise {\n return Loader.load(connection, payer, program, loaderProgramId, elf);\n }\n}\n","var objToString = Object.prototype.toString;\nvar objKeys = Object.keys || function(obj) {\n\t\tvar keys = [];\n\t\tfor (var name in obj) {\n\t\t\tkeys.push(name);\n\t\t}\n\t\treturn keys;\n\t};\n\nfunction stringify(val, isArrayProp) {\n\tvar i, max, str, keys, key, propVal, toStr;\n\tif (val === true) {\n\t\treturn \"true\";\n\t}\n\tif (val === false) {\n\t\treturn \"false\";\n\t}\n\tswitch (typeof val) {\n\t\tcase \"object\":\n\t\t\tif (val === null) {\n\t\t\t\treturn null;\n\t\t\t} else if (val.toJSON && typeof val.toJSON === \"function\") {\n\t\t\t\treturn stringify(val.toJSON(), isArrayProp);\n\t\t\t} else {\n\t\t\t\ttoStr = objToString.call(val);\n\t\t\t\tif (toStr === \"[object Array]\") {\n\t\t\t\t\tstr = '[';\n\t\t\t\t\tmax = val.length - 1;\n\t\t\t\t\tfor(i = 0; i < max; i++) {\n\t\t\t\t\t\tstr += stringify(val[i], true) + ',';\n\t\t\t\t\t}\n\t\t\t\t\tif (max > -1) {\n\t\t\t\t\t\tstr += stringify(val[i], true);\n\t\t\t\t\t}\n\t\t\t\t\treturn str + ']';\n\t\t\t\t} else if (toStr === \"[object Object]\") {\n\t\t\t\t\t// only object is left\n\t\t\t\t\tkeys = objKeys(val).sort();\n\t\t\t\t\tmax = keys.length;\n\t\t\t\t\tstr = \"\";\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile (i < max) {\n\t\t\t\t\t\tkey = keys[i];\n\t\t\t\t\t\tpropVal = stringify(val[key], false);\n\t\t\t\t\t\tif (propVal !== undefined) {\n\t\t\t\t\t\t\tif (str) {\n\t\t\t\t\t\t\t\tstr += ',';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstr += JSON.stringify(key) + ':' + propVal;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\treturn '{' + str + '}';\n\t\t\t\t} else {\n\t\t\t\t\treturn JSON.stringify(val);\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"function\":\n\t\tcase \"undefined\":\n\t\t\treturn isArrayProp ? null : undefined;\n\t\tcase \"string\":\n\t\t\treturn JSON.stringify(val);\n\t\tdefault:\n\t\t\treturn isFinite(val) ? val : null;\n\t}\n}\n\nmodule.exports = function(val) {\n\tvar returnVal = stringify(val, false);\n\tif (returnVal !== undefined) {\n\t\treturn ''+ returnVal;\n\t}\n};\n","/**\n * A `StructFailure` represents a single specific failure in validation.\n */\n/**\n * `StructError` objects are thrown (or returned) when validation fails.\n *\n * Validation logic is design to exit early for maximum performance. The error\n * represents the first error encountered during validation. For more detail,\n * the `error.failures` property is a generator function that can be run to\n * continue validation and receive all the failures in the data.\n */\nclass StructError extends TypeError {\n constructor(failure, failures) {\n let cached;\n const { message, explanation, ...rest } = failure;\n const { path } = failure;\n const msg = path.length === 0 ? message : `At path: ${path.join('.')} -- ${message}`;\n super(explanation ?? msg);\n if (explanation != null)\n this.cause = msg;\n Object.assign(this, rest);\n this.name = this.constructor.name;\n this.failures = () => {\n return (cached ?? (cached = [failure, ...failures()]));\n };\n }\n}\n\n/**\n * Check if a value is an iterator.\n */\nfunction isIterable(x) {\n return isObject(x) && typeof x[Symbol.iterator] === 'function';\n}\n/**\n * Check if a value is a plain object.\n */\nfunction isObject(x) {\n return typeof x === 'object' && x != null;\n}\n/**\n * Check if a value is a non-array object.\n */\nfunction isNonArrayObject(x) {\n return isObject(x) && !Array.isArray(x);\n}\n/**\n * Check if a value is a plain object.\n */\nfunction isPlainObject(x) {\n if (Object.prototype.toString.call(x) !== '[object Object]') {\n return false;\n }\n const prototype = Object.getPrototypeOf(x);\n return prototype === null || prototype === Object.prototype;\n}\n/**\n * Return a value as a printable string.\n */\nfunction print(value) {\n if (typeof value === 'symbol') {\n return value.toString();\n }\n return typeof value === 'string' ? JSON.stringify(value) : `${value}`;\n}\n/**\n * Shifts (removes and returns) the first value from the `input` iterator.\n * Like `Array.prototype.shift()` but for an `Iterator`.\n */\nfunction shiftIterator(input) {\n const { done, value } = input.next();\n return done ? undefined : value;\n}\n/**\n * Convert a single validation result to a failure.\n */\nfunction toFailure(result, context, struct, value) {\n if (result === true) {\n return;\n }\n else if (result === false) {\n result = {};\n }\n else if (typeof result === 'string') {\n result = { message: result };\n }\n const { path, branch } = context;\n const { type } = struct;\n const { refinement, message = `Expected a value of type \\`${type}\\`${refinement ? ` with refinement \\`${refinement}\\`` : ''}, but received: \\`${print(value)}\\``, } = result;\n return {\n value,\n type,\n refinement,\n key: path[path.length - 1],\n path,\n branch,\n ...result,\n message,\n };\n}\n/**\n * Convert a validation result to an iterable of failures.\n */\nfunction* toFailures(result, context, struct, value) {\n if (!isIterable(result)) {\n result = [result];\n }\n for (const r of result) {\n const failure = toFailure(r, context, struct, value);\n if (failure) {\n yield failure;\n }\n }\n}\n/**\n * Check a value against a struct, traversing deeply into nested values, and\n * returning an iterator of failures or success.\n */\nfunction* run(value, struct, options = {}) {\n const { path = [], branch = [value], coerce = false, mask = false } = options;\n const ctx = { path, branch, mask };\n if (coerce) {\n value = struct.coercer(value, ctx);\n }\n let status = 'valid';\n for (const failure of struct.validator(value, ctx)) {\n failure.explanation = options.message;\n status = 'not_valid';\n yield [failure, undefined];\n }\n for (let [k, v, s] of struct.entries(value, ctx)) {\n const ts = run(v, s, {\n path: k === undefined ? path : [...path, k],\n branch: k === undefined ? branch : [...branch, v],\n coerce,\n mask,\n message: options.message,\n });\n for (const t of ts) {\n if (t[0]) {\n status = t[0].refinement != null ? 'not_refined' : 'not_valid';\n yield [t[0], undefined];\n }\n else if (coerce) {\n v = t[1];\n if (k === undefined) {\n value = v;\n }\n else if (value instanceof Map) {\n value.set(k, v);\n }\n else if (value instanceof Set) {\n value.add(v);\n }\n else if (isObject(value)) {\n if (v !== undefined || k in value)\n value[k] = v;\n }\n }\n }\n }\n if (status !== 'not_valid') {\n for (const failure of struct.refiner(value, ctx)) {\n failure.explanation = options.message;\n status = 'not_refined';\n yield [failure, undefined];\n }\n }\n if (status === 'valid') {\n yield [undefined, value];\n }\n}\n\n/**\n * `Struct` objects encapsulate the validation logic for a specific type of\n * values. Once constructed, you use the `assert`, `is` or `validate` helpers to\n * validate unknown input data against the struct.\n */\nclass Struct {\n constructor(props) {\n const { type, schema, validator, refiner, coercer = (value) => value, entries = function* () { }, } = props;\n this.type = type;\n this.schema = schema;\n this.entries = entries;\n this.coercer = coercer;\n if (validator) {\n this.validator = (value, context) => {\n const result = validator(value, context);\n return toFailures(result, context, this, value);\n };\n }\n else {\n this.validator = () => [];\n }\n if (refiner) {\n this.refiner = (value, context) => {\n const result = refiner(value, context);\n return toFailures(result, context, this, value);\n };\n }\n else {\n this.refiner = () => [];\n }\n }\n /**\n * Assert that a value passes the struct's validation, throwing if it doesn't.\n */\n assert(value, message) {\n return assert(value, this, message);\n }\n /**\n * Create a value with the struct's coercion logic, then validate it.\n */\n create(value, message) {\n return create(value, this, message);\n }\n /**\n * Check if a value passes the struct's validation.\n */\n is(value) {\n return is(value, this);\n }\n /**\n * Mask a value, coercing and validating it, but returning only the subset of\n * properties defined by the struct's schema. Masking applies recursively to\n * props of `object` structs only.\n */\n mask(value, message) {\n return mask(value, this, message);\n }\n /**\n * Validate a value with the struct's validation logic, returning a tuple\n * representing the result.\n *\n * You may optionally pass `true` for the `coerce` argument to coerce\n * the value before attempting to validate it. If you do, the result will\n * contain the coerced result when successful. Also, `mask` will turn on\n * masking of the unknown `object` props recursively if passed.\n */\n validate(value, options = {}) {\n return validate(value, this, options);\n }\n}\n/**\n * Assert that a value passes a struct, throwing if it doesn't.\n */\nfunction assert(value, struct, message) {\n const result = validate(value, struct, { message });\n if (result[0]) {\n throw result[0];\n }\n}\n/**\n * Create a value with the coercion logic of struct and validate it.\n */\nfunction create(value, struct, message) {\n const result = validate(value, struct, { coerce: true, message });\n if (result[0]) {\n throw result[0];\n }\n else {\n return result[1];\n }\n}\n/**\n * Mask a value, returning only the subset of properties defined by a struct.\n */\nfunction mask(value, struct, message) {\n const result = validate(value, struct, { coerce: true, mask: true, message });\n if (result[0]) {\n throw result[0];\n }\n else {\n return result[1];\n }\n}\n/**\n * Check if a value passes a struct.\n */\nfunction is(value, struct) {\n const result = validate(value, struct);\n return !result[0];\n}\n/**\n * Validate a value against a struct, returning an error if invalid, or the\n * value (with potential coercion) if valid.\n */\nfunction validate(value, struct, options = {}) {\n const tuples = run(value, struct, options);\n const tuple = shiftIterator(tuples);\n if (tuple[0]) {\n const error = new StructError(tuple[0], function* () {\n for (const t of tuples) {\n if (t[0]) {\n yield t[0];\n }\n }\n });\n return [error, undefined];\n }\n else {\n const v = tuple[1];\n return [undefined, v];\n }\n}\n\nfunction assign(...Structs) {\n const isType = Structs[0].type === 'type';\n const schemas = Structs.map((s) => s.schema);\n const schema = Object.assign({}, ...schemas);\n return isType ? type(schema) : object(schema);\n}\n/**\n * Define a new struct type with a custom validation function.\n */\nfunction define(name, validator) {\n return new Struct({ type: name, schema: null, validator });\n}\n/**\n * Create a new struct based on an existing struct, but the value is allowed to\n * be `undefined`. `log` will be called if the value is not `undefined`.\n */\nfunction deprecated(struct, log) {\n return new Struct({\n ...struct,\n refiner: (value, ctx) => value === undefined || struct.refiner(value, ctx),\n validator(value, ctx) {\n if (value === undefined) {\n return true;\n }\n else {\n log(value, ctx);\n return struct.validator(value, ctx);\n }\n },\n });\n}\n/**\n * Create a struct with dynamic validation logic.\n *\n * The callback will receive the value currently being validated, and must\n * return a struct object to validate it with. This can be useful to model\n * validation logic that changes based on its input.\n */\nfunction dynamic(fn) {\n return new Struct({\n type: 'dynamic',\n schema: null,\n *entries(value, ctx) {\n const struct = fn(value, ctx);\n yield* struct.entries(value, ctx);\n },\n validator(value, ctx) {\n const struct = fn(value, ctx);\n return struct.validator(value, ctx);\n },\n coercer(value, ctx) {\n const struct = fn(value, ctx);\n return struct.coercer(value, ctx);\n },\n refiner(value, ctx) {\n const struct = fn(value, ctx);\n return struct.refiner(value, ctx);\n },\n });\n}\n/**\n * Create a struct with lazily evaluated validation logic.\n *\n * The first time validation is run with the struct, the callback will be called\n * and must return a struct object to use. This is useful for cases where you\n * want to have self-referential structs for nested data structures to avoid a\n * circular definition problem.\n */\nfunction lazy(fn) {\n let struct;\n return new Struct({\n type: 'lazy',\n schema: null,\n *entries(value, ctx) {\n struct ?? (struct = fn());\n yield* struct.entries(value, ctx);\n },\n validator(value, ctx) {\n struct ?? (struct = fn());\n return struct.validator(value, ctx);\n },\n coercer(value, ctx) {\n struct ?? (struct = fn());\n return struct.coercer(value, ctx);\n },\n refiner(value, ctx) {\n struct ?? (struct = fn());\n return struct.refiner(value, ctx);\n },\n });\n}\n/**\n * Create a new struct based on an existing object struct, but excluding\n * specific properties.\n *\n * Like TypeScript's `Omit` utility.\n */\nfunction omit(struct, keys) {\n const { schema } = struct;\n const subschema = { ...schema };\n for (const key of keys) {\n delete subschema[key];\n }\n switch (struct.type) {\n case 'type':\n return type(subschema);\n default:\n return object(subschema);\n }\n}\n/**\n * Create a new struct based on an existing object struct, but with all of its\n * properties allowed to be `undefined`.\n *\n * Like TypeScript's `Partial` utility.\n */\nfunction partial(struct) {\n const isStruct = struct instanceof Struct;\n const schema = isStruct ? { ...struct.schema } : { ...struct };\n for (const key in schema) {\n schema[key] = optional(schema[key]);\n }\n if (isStruct && struct.type === 'type') {\n return type(schema);\n }\n return object(schema);\n}\n/**\n * Create a new struct based on an existing object struct, but only including\n * specific properties.\n *\n * Like TypeScript's `Pick` utility.\n */\nfunction pick(struct, keys) {\n const { schema } = struct;\n const subschema = {};\n for (const key of keys) {\n subschema[key] = schema[key];\n }\n switch (struct.type) {\n case 'type':\n return type(subschema);\n default:\n return object(subschema);\n }\n}\n/**\n * Define a new struct type with a custom validation function.\n *\n * @deprecated This function has been renamed to `define`.\n */\nfunction struct(name, validator) {\n console.warn('superstruct@0.11 - The `struct` helper has been renamed to `define`.');\n return define(name, validator);\n}\n\n/**\n * Ensure that any value passes validation.\n */\nfunction any() {\n return define('any', () => true);\n}\nfunction array(Element) {\n return new Struct({\n type: 'array',\n schema: Element,\n *entries(value) {\n if (Element && Array.isArray(value)) {\n for (const [i, v] of value.entries()) {\n yield [i, v, Element];\n }\n }\n },\n coercer(value) {\n return Array.isArray(value) ? value.slice() : value;\n },\n validator(value) {\n return (Array.isArray(value) ||\n `Expected an array value, but received: ${print(value)}`);\n },\n });\n}\n/**\n * Ensure that a value is a bigint.\n */\nfunction bigint() {\n return define('bigint', (value) => {\n return typeof value === 'bigint';\n });\n}\n/**\n * Ensure that a value is a boolean.\n */\nfunction boolean() {\n return define('boolean', (value) => {\n return typeof value === 'boolean';\n });\n}\n/**\n * Ensure that a value is a valid `Date`.\n *\n * Note: this also ensures that the value is *not* an invalid `Date` object,\n * which can occur when parsing a date fails but still returns a `Date`.\n */\nfunction date() {\n return define('date', (value) => {\n return ((value instanceof Date && !isNaN(value.getTime())) ||\n `Expected a valid \\`Date\\` object, but received: ${print(value)}`);\n });\n}\nfunction enums(values) {\n const schema = {};\n const description = values.map((v) => print(v)).join();\n for (const key of values) {\n schema[key] = key;\n }\n return new Struct({\n type: 'enums',\n schema,\n validator(value) {\n return (values.includes(value) ||\n `Expected one of \\`${description}\\`, but received: ${print(value)}`);\n },\n });\n}\n/**\n * Ensure that a value is a function.\n */\nfunction func() {\n return define('func', (value) => {\n return (typeof value === 'function' ||\n `Expected a function, but received: ${print(value)}`);\n });\n}\n/**\n * Ensure that a value is an instance of a specific class.\n */\nfunction instance(Class) {\n return define('instance', (value) => {\n return (value instanceof Class ||\n `Expected a \\`${Class.name}\\` instance, but received: ${print(value)}`);\n });\n}\n/**\n * Ensure that a value is an integer.\n */\nfunction integer() {\n return define('integer', (value) => {\n return ((typeof value === 'number' && !isNaN(value) && Number.isInteger(value)) ||\n `Expected an integer, but received: ${print(value)}`);\n });\n}\n/**\n * Ensure that a value matches all of a set of types.\n */\nfunction intersection(Structs) {\n return new Struct({\n type: 'intersection',\n schema: null,\n *entries(value, ctx) {\n for (const S of Structs) {\n yield* S.entries(value, ctx);\n }\n },\n *validator(value, ctx) {\n for (const S of Structs) {\n yield* S.validator(value, ctx);\n }\n },\n *refiner(value, ctx) {\n for (const S of Structs) {\n yield* S.refiner(value, ctx);\n }\n },\n });\n}\nfunction literal(constant) {\n const description = print(constant);\n const t = typeof constant;\n return new Struct({\n type: 'literal',\n schema: t === 'string' || t === 'number' || t === 'boolean' ? constant : null,\n validator(value) {\n return (value === constant ||\n `Expected the literal \\`${description}\\`, but received: ${print(value)}`);\n },\n });\n}\nfunction map(Key, Value) {\n return new Struct({\n type: 'map',\n schema: null,\n *entries(value) {\n if (Key && Value && value instanceof Map) {\n for (const [k, v] of value.entries()) {\n yield [k, k, Key];\n yield [k, v, Value];\n }\n }\n },\n coercer(value) {\n return value instanceof Map ? new Map(value) : value;\n },\n validator(value) {\n return (value instanceof Map ||\n `Expected a \\`Map\\` object, but received: ${print(value)}`);\n },\n });\n}\n/**\n * Ensure that no value ever passes validation.\n */\nfunction never() {\n return define('never', () => false);\n}\n/**\n * Augment an existing struct to allow `null` values.\n */\nfunction nullable(struct) {\n return new Struct({\n ...struct,\n validator: (value, ctx) => value === null || struct.validator(value, ctx),\n refiner: (value, ctx) => value === null || struct.refiner(value, ctx),\n });\n}\n/**\n * Ensure that a value is a number.\n */\nfunction number() {\n return define('number', (value) => {\n return ((typeof value === 'number' && !isNaN(value)) ||\n `Expected a number, but received: ${print(value)}`);\n });\n}\nfunction object(schema) {\n const knowns = schema ? Object.keys(schema) : [];\n const Never = never();\n return new Struct({\n type: 'object',\n schema: schema ? schema : null,\n *entries(value) {\n if (schema && isObject(value)) {\n const unknowns = new Set(Object.keys(value));\n for (const key of knowns) {\n unknowns.delete(key);\n yield [key, value[key], schema[key]];\n }\n for (const key of unknowns) {\n yield [key, value[key], Never];\n }\n }\n },\n validator(value) {\n return (isNonArrayObject(value) ||\n `Expected an object, but received: ${print(value)}`);\n },\n coercer(value, ctx) {\n if (!isNonArrayObject(value)) {\n return value;\n }\n const coerced = { ...value };\n // The `object` struct has special behaviour enabled by the mask flag.\n // When masking, properties that are not in the schema are deleted from\n // the coerced object instead of eventually failing validaiton.\n if (ctx.mask && schema) {\n for (const key in coerced) {\n if (schema[key] === undefined) {\n delete coerced[key];\n }\n }\n }\n return coerced;\n },\n });\n}\n/**\n * Augment a struct to allow `undefined` values.\n */\nfunction optional(struct) {\n return new Struct({\n ...struct,\n validator: (value, ctx) => value === undefined || struct.validator(value, ctx),\n refiner: (value, ctx) => value === undefined || struct.refiner(value, ctx),\n });\n}\n/**\n * Ensure that a value is an object with keys and values of specific types, but\n * without ensuring any specific shape of properties.\n *\n * Like TypeScript's `Record` utility.\n */\nfunction record(Key, Value) {\n return new Struct({\n type: 'record',\n schema: null,\n *entries(value) {\n if (isObject(value)) {\n for (const k in value) {\n const v = value[k];\n yield [k, k, Key];\n yield [k, v, Value];\n }\n }\n },\n validator(value) {\n return (isNonArrayObject(value) ||\n `Expected an object, but received: ${print(value)}`);\n },\n coercer(value) {\n return isNonArrayObject(value) ? { ...value } : value;\n },\n });\n}\n/**\n * Ensure that a value is a `RegExp`.\n *\n * Note: this does not test the value against the regular expression! For that\n * you need to use the `pattern()` refinement.\n */\nfunction regexp() {\n return define('regexp', (value) => {\n return value instanceof RegExp;\n });\n}\nfunction set(Element) {\n return new Struct({\n type: 'set',\n schema: null,\n *entries(value) {\n if (Element && value instanceof Set) {\n for (const v of value) {\n yield [v, v, Element];\n }\n }\n },\n coercer(value) {\n return value instanceof Set ? new Set(value) : value;\n },\n validator(value) {\n return (value instanceof Set ||\n `Expected a \\`Set\\` object, but received: ${print(value)}`);\n },\n });\n}\n/**\n * Ensure that a value is a string.\n */\nfunction string() {\n return define('string', (value) => {\n return (typeof value === 'string' ||\n `Expected a string, but received: ${print(value)}`);\n });\n}\n/**\n * Ensure that a value is a tuple of a specific length, and that each of its\n * elements is of a specific type.\n */\nfunction tuple(Structs) {\n const Never = never();\n return new Struct({\n type: 'tuple',\n schema: null,\n *entries(value) {\n if (Array.isArray(value)) {\n const length = Math.max(Structs.length, value.length);\n for (let i = 0; i < length; i++) {\n yield [i, value[i], Structs[i] || Never];\n }\n }\n },\n validator(value) {\n return (Array.isArray(value) ||\n `Expected an array, but received: ${print(value)}`);\n },\n coercer(value) {\n return Array.isArray(value) ? value.slice() : value;\n },\n });\n}\n/**\n * Ensure that a value has a set of known properties of specific types.\n *\n * Note: Unrecognized properties are allowed and untouched. This is similar to\n * how TypeScript's structural typing works.\n */\nfunction type(schema) {\n const keys = Object.keys(schema);\n return new Struct({\n type: 'type',\n schema,\n *entries(value) {\n if (isObject(value)) {\n for (const k of keys) {\n yield [k, value[k], schema[k]];\n }\n }\n },\n validator(value) {\n return (isNonArrayObject(value) ||\n `Expected an object, but received: ${print(value)}`);\n },\n coercer(value) {\n return isNonArrayObject(value) ? { ...value } : value;\n },\n });\n}\n/**\n * Ensure that a value matches one of a set of types.\n */\nfunction union(Structs) {\n const description = Structs.map((s) => s.type).join(' | ');\n return new Struct({\n type: 'union',\n schema: null,\n coercer(value, ctx) {\n for (const S of Structs) {\n const [error, coerced] = S.validate(value, {\n coerce: true,\n mask: ctx.mask,\n });\n if (!error) {\n return coerced;\n }\n }\n return value;\n },\n validator(value, ctx) {\n const failures = [];\n for (const S of Structs) {\n const [...tuples] = run(value, S, ctx);\n const [first] = tuples;\n if (!first[0]) {\n return [];\n }\n else {\n for (const [failure] of tuples) {\n if (failure) {\n failures.push(failure);\n }\n }\n }\n }\n return [\n `Expected the value to satisfy a union of \\`${description}\\`, but received: ${print(value)}`,\n ...failures,\n ];\n },\n });\n}\n/**\n * Ensure that any value passes validation, without widening its type to `any`.\n */\nfunction unknown() {\n return define('unknown', () => true);\n}\n\n/**\n * Augment a `Struct` to add an additional coercion step to its input.\n *\n * This allows you to transform input data before validating it, to increase the\n * likelihood that it passes validation—for example for default values, parsing\n * different formats, etc.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\nfunction coerce(struct, condition, coercer) {\n return new Struct({\n ...struct,\n coercer: (value, ctx) => {\n return is(value, condition)\n ? struct.coercer(coercer(value, ctx), ctx)\n : struct.coercer(value, ctx);\n },\n });\n}\n/**\n * Augment a struct to replace `undefined` values with a default.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\nfunction defaulted(struct, fallback, options = {}) {\n return coerce(struct, unknown(), (x) => {\n const f = typeof fallback === 'function' ? fallback() : fallback;\n if (x === undefined) {\n return f;\n }\n if (!options.strict && isPlainObject(x) && isPlainObject(f)) {\n const ret = { ...x };\n let changed = false;\n for (const key in f) {\n if (ret[key] === undefined) {\n ret[key] = f[key];\n changed = true;\n }\n }\n if (changed) {\n return ret;\n }\n }\n return x;\n });\n}\n/**\n * Augment a struct to trim string inputs.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\nfunction trimmed(struct) {\n return coerce(struct, string(), (x) => x.trim());\n}\n\n/**\n * Ensure that a string, array, map, or set is empty.\n */\nfunction empty(struct) {\n return refine(struct, 'empty', (value) => {\n const size = getSize(value);\n return (size === 0 ||\n `Expected an empty ${struct.type} but received one with a size of \\`${size}\\``);\n });\n}\nfunction getSize(value) {\n if (value instanceof Map || value instanceof Set) {\n return value.size;\n }\n else {\n return value.length;\n }\n}\n/**\n * Ensure that a number or date is below a threshold.\n */\nfunction max(struct, threshold, options = {}) {\n const { exclusive } = options;\n return refine(struct, 'max', (value) => {\n return exclusive\n ? value < threshold\n : value <= threshold ||\n `Expected a ${struct.type} less than ${exclusive ? '' : 'or equal to '}${threshold} but received \\`${value}\\``;\n });\n}\n/**\n * Ensure that a number or date is above a threshold.\n */\nfunction min(struct, threshold, options = {}) {\n const { exclusive } = options;\n return refine(struct, 'min', (value) => {\n return exclusive\n ? value > threshold\n : value >= threshold ||\n `Expected a ${struct.type} greater than ${exclusive ? '' : 'or equal to '}${threshold} but received \\`${value}\\``;\n });\n}\n/**\n * Ensure that a string, array, map or set is not empty.\n */\nfunction nonempty(struct) {\n return refine(struct, 'nonempty', (value) => {\n const size = getSize(value);\n return (size > 0 || `Expected a nonempty ${struct.type} but received an empty one`);\n });\n}\n/**\n * Ensure that a string matches a regular expression.\n */\nfunction pattern(struct, regexp) {\n return refine(struct, 'pattern', (value) => {\n return (regexp.test(value) ||\n `Expected a ${struct.type} matching \\`/${regexp.source}/\\` but received \"${value}\"`);\n });\n}\n/**\n * Ensure that a string, array, number, date, map, or set has a size (or length, or time) between `min` and `max`.\n */\nfunction size(struct, min, max = min) {\n const expected = `Expected a ${struct.type}`;\n const of = min === max ? `of \\`${min}\\`` : `between \\`${min}\\` and \\`${max}\\``;\n return refine(struct, 'size', (value) => {\n if (typeof value === 'number' || value instanceof Date) {\n return ((min <= value && value <= max) ||\n `${expected} ${of} but received \\`${value}\\``);\n }\n else if (value instanceof Map || value instanceof Set) {\n const { size } = value;\n return ((min <= size && size <= max) ||\n `${expected} with a size ${of} but received one with a size of \\`${size}\\``);\n }\n else {\n const { length } = value;\n return ((min <= length && length <= max) ||\n `${expected} with a length ${of} but received one with a length of \\`${length}\\``);\n }\n });\n}\n/**\n * Augment a `Struct` to add an additional refinement to the validation.\n *\n * The refiner function is guaranteed to receive a value of the struct's type,\n * because the struct's existing validation will already have passed. This\n * allows you to layer additional validation on top of existing structs.\n */\nfunction refine(struct, name, refiner) {\n return new Struct({\n ...struct,\n *refiner(value, ctx) {\n yield* struct.refiner(value, ctx);\n const result = refiner(value, ctx);\n const failures = toFailures(result, ctx, struct, value);\n for (const failure of failures) {\n yield { ...failure, refinement: name };\n }\n },\n });\n}\n\nexport { Struct, StructError, any, array, assert, assign, bigint, boolean, coerce, create, date, defaulted, define, deprecated, dynamic, empty, enums, func, instance, integer, intersection, is, lazy, literal, map, mask, max, min, never, nonempty, nullable, number, object, omit, optional, partial, pattern, pick, record, refine, regexp, set, size, string, struct, trimmed, tuple, type, union, unknown, validate };\n//# sourceMappingURL=index.mjs.map\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","'use strict';\n\nconst uuid = require('uuid').v4;\n\n/**\n * Generates a JSON-RPC 1.0 or 2.0 request\n * @param {String} method Name of method to call\n * @param {Array|Object} params Array of parameters passed to the method as specified, or an object of parameter names and corresponding value\n * @param {String|Number|null} [id] Request ID can be a string, number, null for explicit notification or left out for automatic generation\n * @param {Object} [options]\n * @param {Number} [options.version=2] JSON-RPC version to use (1 or 2)\n * @param {Boolean} [options.notificationIdNull=false] When true, version 2 requests will set id to null instead of omitting it\n * @param {Function} [options.generator] Passed the request, and the options object and is expected to return a request ID\n * @throws {TypeError} If any of the parameters are invalid\n * @return {Object} A JSON-RPC 1.0 or 2.0 request\n * @memberOf Utils\n */\nconst generateRequest = function(method, params, id, options) {\n if(typeof method !== 'string') {\n throw new TypeError(method + ' must be a string');\n }\n\n options = options || {};\n\n // check valid version provided\n const version = typeof options.version === 'number' ? options.version : 2;\n if (version !== 1 && version !== 2) {\n throw new TypeError(version + ' must be 1 or 2');\n }\n\n const request = {\n method: method\n };\n\n if(version === 2) {\n request.jsonrpc = '2.0';\n }\n\n if(params) {\n // params given, but invalid?\n if(typeof params !== 'object' && !Array.isArray(params)) {\n throw new TypeError(params + ' must be an object, array or omitted');\n }\n request.params = params;\n }\n\n // if id was left out, generate one (null means explicit notification)\n if(typeof(id) === 'undefined') {\n const generator = typeof options.generator === 'function' ? options.generator : function() { return uuid(); };\n request.id = generator(request, options);\n } else if (version === 2 && id === null) {\n // we have a version 2 notification\n if (options.notificationIdNull) {\n request.id = null; // id will not be set at all unless option provided\n }\n } else {\n request.id = id;\n }\n\n return request;\n};\n\nmodule.exports = generateRequest;\n","'use strict';\n\nconst uuid = require('uuid').v4;\nconst generateRequest = require('../../generateRequest');\n\n/**\n * Constructor for a Jayson Browser Client that does not depend any node.js core libraries\n * @class ClientBrowser\n * @param {Function} callServer Method that calls the server, receives the stringified request and a regular node-style callback\n * @param {Object} [options]\n * @param {Function} [options.reviver] Reviver function for JSON\n * @param {Function} [options.replacer] Replacer function for JSON\n * @param {Number} [options.version=2] JSON-RPC version to use (1|2)\n * @param {Function} [options.generator] Function to use for generating request IDs\n * @param {Boolean} [options.notificationIdNull=false] When true, version 2 requests will set id to null instead of omitting it\n * @return {ClientBrowser}\n */\nconst ClientBrowser = function(callServer, options) {\n if(!(this instanceof ClientBrowser)) {\n return new ClientBrowser(callServer, options);\n }\n\n if (!options) {\n options = {};\n }\n\n this.options = {\n reviver: typeof options.reviver !== 'undefined' ? options.reviver : null,\n replacer: typeof options.replacer !== 'undefined' ? options.replacer : null,\n generator: typeof options.generator !== 'undefined' ? options.generator : function() { return uuid(); },\n version: typeof options.version !== 'undefined' ? options.version : 2,\n notificationIdNull: typeof options.notificationIdNull === 'boolean' ? options.notificationIdNull : false,\n };\n\n this.callServer = callServer;\n};\n\nmodule.exports = ClientBrowser;\n\n/**\n * Creates a request and dispatches it if given a callback.\n * @param {String|Array} method A batch request if passed an Array, or a method name if passed a String\n * @param {Array|Object} [params] Parameters for the method\n * @param {String|Number} [id] Optional id. If undefined an id will be generated. If null it creates a notification request\n * @param {Function} [callback] Request callback. If specified, executes the request rather than only returning it.\n * @throws {TypeError} Invalid parameters\n * @return {Object} JSON-RPC 1.0 or 2.0 compatible request\n */\nClientBrowser.prototype.request = function(method, params, id, callback) {\n const self = this;\n let request = null;\n\n // is this a batch request?\n const isBatch = Array.isArray(method) && typeof params === 'function';\n\n if (this.options.version === 1 && isBatch) {\n throw new TypeError('JSON-RPC 1.0 does not support batching');\n }\n\n // is this a raw request?\n const isRaw = !isBatch && method && typeof method === 'object' && typeof params === 'function';\n\n if(isBatch || isRaw) {\n callback = params;\n request = method;\n } else {\n if(typeof id === 'function') {\n callback = id;\n // specifically undefined because \"null\" is a notification request\n id = undefined;\n }\n\n const hasCallback = typeof callback === 'function';\n\n try {\n request = generateRequest(method, params, id, {\n generator: this.options.generator,\n version: this.options.version,\n notificationIdNull: this.options.notificationIdNull,\n });\n } catch(err) {\n if(hasCallback) {\n return callback(err);\n }\n throw err;\n }\n\n // no callback means we should just return a raw request\n if(!hasCallback) {\n return request;\n }\n\n }\n\n let message;\n try {\n message = JSON.stringify(request, this.options.replacer);\n } catch(err) {\n return callback(err);\n }\n\n this.callServer(message, function(err, response) {\n self._parseResponse(err, response, callback);\n });\n\n // always return the raw request\n return request;\n};\n\n/**\n * Parses a response from a server\n * @param {Object} err Error to pass on that is unrelated to the actual response\n * @param {String} responseText JSON-RPC 1.0 or 2.0 response\n * @param {Function} callback Callback that will receive different arguments depending on the amount of parameters\n * @private\n */\nClientBrowser.prototype._parseResponse = function(err, responseText, callback) {\n if(err) {\n callback(err);\n return;\n }\n\n if(!responseText) {\n // empty response text, assume that is correct because it could be a\n // notification which jayson does not give any body for\n return callback();\n }\n\n let response;\n try {\n response = JSON.parse(responseText, this.options.reviver);\n } catch(err) {\n return callback(err);\n }\n\n if(callback.length === 3) {\n // if callback length is 3, we split callback arguments on error and response\n\n // is batch response?\n if(Array.isArray(response)) {\n\n // neccesary to split strictly on validity according to spec here\n const isError = function(res) {\n return typeof res.error !== 'undefined';\n };\n\n const isNotError = function (res) {\n return !isError(res);\n };\n\n return callback(null, response.filter(isError), response.filter(isNotError));\n \n } else {\n\n // split regardless of validity\n return callback(null, response.error, response.result);\n \n }\n \n }\n\n callback(null, response);\n};\n","const MINIMUM_SLOT_PER_EPOCH = 32;\n\n// Returns the number of trailing zeros in the binary representation of self.\nfunction trailingZeros(n: number) {\n let trailingZeros = 0;\n while (n > 1) {\n n /= 2;\n trailingZeros++;\n }\n return trailingZeros;\n}\n\n// Returns the smallest power of two greater than or equal to n\nfunction nextPowerOfTwo(n: number) {\n if (n === 0) return 1;\n n--;\n n |= n >> 1;\n n |= n >> 2;\n n |= n >> 4;\n n |= n >> 8;\n n |= n >> 16;\n n |= n >> 32;\n return n + 1;\n}\n\n/**\n * Epoch schedule\n * (see https://docs.solana.com/terminology#epoch)\n * Can be retrieved with the {@link Connection.getEpochSchedule} method\n */\nexport class EpochSchedule {\n /** The maximum number of slots in each epoch */\n public slotsPerEpoch: number;\n /** The number of slots before beginning of an epoch to calculate a leader schedule for that epoch */\n public leaderScheduleSlotOffset: number;\n /** Indicates whether epochs start short and grow */\n public warmup: boolean;\n /** The first epoch with `slotsPerEpoch` slots */\n public firstNormalEpoch: number;\n /** The first slot of `firstNormalEpoch` */\n public firstNormalSlot: number;\n\n constructor(\n slotsPerEpoch: number,\n leaderScheduleSlotOffset: number,\n warmup: boolean,\n firstNormalEpoch: number,\n firstNormalSlot: number,\n ) {\n this.slotsPerEpoch = slotsPerEpoch;\n this.leaderScheduleSlotOffset = leaderScheduleSlotOffset;\n this.warmup = warmup;\n this.firstNormalEpoch = firstNormalEpoch;\n this.firstNormalSlot = firstNormalSlot;\n }\n\n getEpoch(slot: number): number {\n return this.getEpochAndSlotIndex(slot)[0];\n }\n\n getEpochAndSlotIndex(slot: number): [number, number] {\n if (slot < this.firstNormalSlot) {\n const epoch =\n trailingZeros(nextPowerOfTwo(slot + MINIMUM_SLOT_PER_EPOCH + 1)) -\n trailingZeros(MINIMUM_SLOT_PER_EPOCH) -\n 1;\n\n const epochLen = this.getSlotsInEpoch(epoch);\n const slotIndex = slot - (epochLen - MINIMUM_SLOT_PER_EPOCH);\n return [epoch, slotIndex];\n } else {\n const normalSlotIndex = slot - this.firstNormalSlot;\n const normalEpochIndex = Math.floor(normalSlotIndex / this.slotsPerEpoch);\n const epoch = this.firstNormalEpoch + normalEpochIndex;\n const slotIndex = normalSlotIndex % this.slotsPerEpoch;\n return [epoch, slotIndex];\n }\n }\n\n getFirstSlotInEpoch(epoch: number): number {\n if (epoch <= this.firstNormalEpoch) {\n return (Math.pow(2, epoch) - 1) * MINIMUM_SLOT_PER_EPOCH;\n } else {\n return (\n (epoch - this.firstNormalEpoch) * this.slotsPerEpoch +\n this.firstNormalSlot\n );\n }\n }\n\n getLastSlotInEpoch(epoch: number): number {\n return this.getFirstSlotInEpoch(epoch) + this.getSlotsInEpoch(epoch) - 1;\n }\n\n getSlotsInEpoch(epoch: number) {\n if (epoch < this.firstNormalEpoch) {\n return Math.pow(2, epoch + trailingZeros(MINIMUM_SLOT_PER_EPOCH));\n } else {\n return this.slotsPerEpoch;\n }\n }\n}\n","export const Headers: typeof globalThis.Headers = globalThis.Headers;\nexport const Request: typeof globalThis.Request = globalThis.Request;\nexport const Response: typeof globalThis.Response = globalThis.Response;\nexport default globalThis.fetch;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import { Buffer } from 'buffer';\nimport { EventEmitter } from 'eventemitter3';\n\n// node_modules/esbuild-plugin-polyfill-node/polyfills/buffer.js\nvar WebSocketBrowserImpl = class extends EventEmitter {\n socket;\n /** Instantiate a WebSocket class\n * @constructor\n * @param {String} address - url to a websocket server\n * @param {(Object)} options - websocket options\n * @param {(String|Array)} protocols - a list of protocols\n * @return {WebSocketBrowserImpl} - returns a WebSocket instance\n */\n constructor(address, options, protocols) {\n super();\n this.socket = new window.WebSocket(address, protocols);\n this.socket.onopen = () => this.emit(\"open\");\n this.socket.onmessage = (event) => this.emit(\"message\", event.data);\n this.socket.onerror = (error) => this.emit(\"error\", error);\n this.socket.onclose = (event) => {\n this.emit(\"close\", event.code, event.reason);\n };\n }\n /**\n * Sends data through a websocket connection\n * @method\n * @param {(String|Object)} data - data to be sent via websocket\n * @param {Object} optionsOrCallback - ws options\n * @param {Function} callback - a callback called once the data is sent\n * @return {Undefined}\n */\n send(data, optionsOrCallback, callback) {\n const cb = callback || optionsOrCallback;\n try {\n this.socket.send(data);\n cb();\n } catch (error) {\n cb(error);\n }\n }\n /**\n * Closes an underlying socket\n * @method\n * @param {Number} code - status code explaining why the connection is being closed\n * @param {String} reason - a description why the connection is closing\n * @return {Undefined}\n * @throws {Error}\n */\n close(code, reason) {\n this.socket.close(code, reason);\n }\n addEventListener(type, listener, options) {\n this.socket.addEventListener(type, listener, options);\n }\n};\nfunction WebSocket(address, options) {\n return new WebSocketBrowserImpl(address, options);\n}\n\n// src/lib/utils.ts\nvar DefaultDataPack = class {\n encode(value) {\n return JSON.stringify(value);\n }\n decode(value) {\n return JSON.parse(value);\n }\n};\n\n// src/lib/client.ts\nvar CommonClient = class extends EventEmitter {\n address;\n rpc_id;\n queue;\n options;\n autoconnect;\n ready;\n reconnect;\n reconnect_timer_id;\n reconnect_interval;\n max_reconnects;\n rest_options;\n current_reconnects;\n generate_request_id;\n socket;\n webSocketFactory;\n dataPack;\n /**\n * Instantiate a Client class.\n * @constructor\n * @param {webSocketFactory} webSocketFactory - factory method for WebSocket\n * @param {String} address - url to a websocket server\n * @param {Object} options - ws options object with reconnect parameters\n * @param {Function} generate_request_id - custom generation request Id\n * @param {DataPack} dataPack - data pack contains encoder and decoder\n * @return {CommonClient}\n */\n constructor(webSocketFactory, address = \"ws://localhost:8080\", {\n autoconnect = true,\n reconnect = true,\n reconnect_interval = 1e3,\n max_reconnects = 5,\n ...rest_options\n } = {}, generate_request_id, dataPack) {\n super();\n this.webSocketFactory = webSocketFactory;\n this.queue = {};\n this.rpc_id = 0;\n this.address = address;\n this.autoconnect = autoconnect;\n this.ready = false;\n this.reconnect = reconnect;\n this.reconnect_timer_id = void 0;\n this.reconnect_interval = reconnect_interval;\n this.max_reconnects = max_reconnects;\n this.rest_options = rest_options;\n this.current_reconnects = 0;\n this.generate_request_id = generate_request_id || (() => ++this.rpc_id);\n if (!dataPack) this.dataPack = new DefaultDataPack();\n else this.dataPack = dataPack;\n if (this.autoconnect)\n this._connect(this.address, {\n autoconnect: this.autoconnect,\n reconnect: this.reconnect,\n reconnect_interval: this.reconnect_interval,\n max_reconnects: this.max_reconnects,\n ...this.rest_options\n });\n }\n /**\n * Connects to a defined server if not connected already.\n * @method\n * @return {Undefined}\n */\n connect() {\n if (this.socket) return;\n this._connect(this.address, {\n autoconnect: this.autoconnect,\n reconnect: this.reconnect,\n reconnect_interval: this.reconnect_interval,\n max_reconnects: this.max_reconnects,\n ...this.rest_options\n });\n }\n /**\n * Calls a registered RPC method on server.\n * @method\n * @param {String} method - RPC method name\n * @param {Object|Array} params - optional method parameters\n * @param {Number} timeout - RPC reply timeout value\n * @param {Object} ws_opts - options passed to ws\n * @return {Promise}\n */\n call(method, params, timeout, ws_opts) {\n if (!ws_opts && \"object\" === typeof timeout) {\n ws_opts = timeout;\n timeout = null;\n }\n return new Promise((resolve, reject) => {\n if (!this.ready) return reject(new Error(\"socket not ready\"));\n const rpc_id = this.generate_request_id(method, params);\n const message = {\n jsonrpc: \"2.0\",\n method,\n params: params || void 0,\n id: rpc_id\n };\n this.socket.send(this.dataPack.encode(message), ws_opts, (error) => {\n if (error) return reject(error);\n this.queue[rpc_id] = { promise: [resolve, reject] };\n if (timeout) {\n this.queue[rpc_id].timeout = setTimeout(() => {\n delete this.queue[rpc_id];\n reject(new Error(\"reply timeout\"));\n }, timeout);\n }\n });\n });\n }\n /**\n * Logins with the other side of the connection.\n * @method\n * @param {Object} params - Login credentials object\n * @return {Promise}\n */\n async login(params) {\n const resp = await this.call(\"rpc.login\", params);\n if (!resp) throw new Error(\"authentication failed\");\n return resp;\n }\n /**\n * Fetches a list of client's methods registered on server.\n * @method\n * @return {Array}\n */\n async listMethods() {\n return await this.call(\"__listMethods\");\n }\n /**\n * Sends a JSON-RPC 2.0 notification to server.\n * @method\n * @param {String} method - RPC method name\n * @param {Object} params - optional method parameters\n * @return {Promise}\n */\n notify(method, params) {\n return new Promise((resolve, reject) => {\n if (!this.ready) return reject(new Error(\"socket not ready\"));\n const message = {\n jsonrpc: \"2.0\",\n method,\n params\n };\n this.socket.send(this.dataPack.encode(message), (error) => {\n if (error) return reject(error);\n resolve();\n });\n });\n }\n /**\n * Subscribes for a defined event.\n * @method\n * @param {String|Array} event - event name\n * @return {Undefined}\n * @throws {Error}\n */\n async subscribe(event) {\n if (typeof event === \"string\") event = [event];\n const result = await this.call(\"rpc.on\", event);\n if (typeof event === \"string\" && result[event] !== \"ok\")\n throw new Error(\n \"Failed subscribing to an event '\" + event + \"' with: \" + result[event]\n );\n return result;\n }\n /**\n * Unsubscribes from a defined event.\n * @method\n * @param {String|Array} event - event name\n * @return {Undefined}\n * @throws {Error}\n */\n async unsubscribe(event) {\n if (typeof event === \"string\") event = [event];\n const result = await this.call(\"rpc.off\", event);\n if (typeof event === \"string\" && result[event] !== \"ok\")\n throw new Error(\"Failed unsubscribing from an event with: \" + result);\n return result;\n }\n /**\n * Closes a WebSocket connection gracefully.\n * @method\n * @param {Number} code - socket close code\n * @param {String} data - optional data to be sent before closing\n * @return {Undefined}\n */\n close(code, data) {\n this.socket.close(code || 1e3, data);\n }\n /**\n * Enable / disable automatic reconnection.\n * @method\n * @param {Boolean} reconnect - enable / disable reconnection\n * @return {Undefined}\n */\n setAutoReconnect(reconnect) {\n this.reconnect = reconnect;\n }\n /**\n * Set the interval between reconnection attempts.\n * @method\n * @param {Number} interval - reconnection interval in milliseconds\n * @return {Undefined}\n */\n setReconnectInterval(interval) {\n this.reconnect_interval = interval;\n }\n /**\n * Set the maximum number of reconnection attempts.\n * @method\n * @param {Number} max_reconnects - maximum reconnection attempts\n * @return {Undefined}\n */\n setMaxReconnects(max_reconnects) {\n this.max_reconnects = max_reconnects;\n }\n /**\n * Connection/Message handler.\n * @method\n * @private\n * @param {String} address - WebSocket API address\n * @param {Object} options - ws options object\n * @return {Undefined}\n */\n _connect(address, options) {\n clearTimeout(this.reconnect_timer_id);\n this.socket = this.webSocketFactory(address, options);\n this.socket.addEventListener(\"open\", () => {\n this.ready = true;\n this.emit(\"open\");\n this.current_reconnects = 0;\n });\n this.socket.addEventListener(\"message\", ({ data: message }) => {\n if (message instanceof ArrayBuffer)\n message = Buffer.from(message).toString();\n try {\n message = this.dataPack.decode(message);\n } catch (error) {\n return;\n }\n if (message.notification && this.listeners(message.notification).length) {\n if (!Object.keys(message.params).length)\n return this.emit(message.notification);\n const args = [message.notification];\n if (message.params.constructor === Object) args.push(message.params);\n else\n for (let i = 0; i < message.params.length; i++)\n args.push(message.params[i]);\n return Promise.resolve().then(() => {\n this.emit.apply(this, args);\n });\n }\n if (!this.queue[message.id]) {\n if (message.method) {\n return Promise.resolve().then(() => {\n this.emit(message.method, message?.params);\n });\n }\n return;\n }\n if (\"error\" in message === \"result\" in message)\n this.queue[message.id].promise[1](\n new Error(\n 'Server response malformed. Response must include either \"result\" or \"error\", but not both.'\n )\n );\n if (this.queue[message.id].timeout)\n clearTimeout(this.queue[message.id].timeout);\n if (message.error) this.queue[message.id].promise[1](message.error);\n else this.queue[message.id].promise[0](message.result);\n delete this.queue[message.id];\n });\n this.socket.addEventListener(\"error\", (error) => this.emit(\"error\", error));\n this.socket.addEventListener(\"close\", ({ code, reason }) => {\n if (this.ready)\n setTimeout(() => this.emit(\"close\", code, reason), 0);\n this.ready = false;\n this.socket = void 0;\n if (code === 1e3) return;\n this.current_reconnects++;\n if (this.reconnect && (this.max_reconnects > this.current_reconnects || this.max_reconnects === 0))\n this.reconnect_timer_id = setTimeout(\n () => this._connect(address, options),\n this.reconnect_interval\n );\n });\n }\n};\n\n// src/index.browser.ts\nvar Client = class extends CommonClient {\n constructor(address = \"ws://localhost:8080\", {\n autoconnect = true,\n reconnect = true,\n reconnect_interval = 1e3,\n max_reconnects = 5\n } = {}, generate_request_id) {\n super(\n WebSocket,\n address,\n {\n autoconnect,\n reconnect,\n reconnect_interval,\n max_reconnects\n },\n generate_request_id\n );\n }\n};\n\nexport { Client, CommonClient, DefaultDataPack, WebSocket };\n//# sourceMappingURL=out.js.map\n//# sourceMappingURL=index.browser.mjs.map","import {\n CommonClient,\n ICommonWebSocket,\n IWSClientAdditionalOptions,\n NodeWebSocketType,\n NodeWebSocketTypeOptions,\n WebSocket as createRpc,\n} from 'rpc-websockets';\n\ninterface IHasReadyState {\n readyState: WebSocket['readyState'];\n}\n\nexport default class RpcWebSocketClient extends CommonClient {\n private underlyingSocket: IHasReadyState | undefined;\n constructor(\n address?: string,\n options?: IWSClientAdditionalOptions & NodeWebSocketTypeOptions,\n generate_request_id?: (\n method: string,\n params: object | Array,\n ) => number,\n ) {\n const webSocketFactory = (url: string) => {\n const rpc = createRpc(url, {\n autoconnect: true,\n max_reconnects: 5,\n reconnect: true,\n reconnect_interval: 1000,\n ...options,\n });\n if ('socket' in rpc) {\n this.underlyingSocket = rpc.socket as ReturnType;\n } else {\n this.underlyingSocket = rpc as NodeWebSocketType;\n }\n return rpc as ICommonWebSocket;\n };\n super(webSocketFactory, address, options, generate_request_id);\n }\n call(\n ...args: Parameters\n ): ReturnType {\n const readyState = this.underlyingSocket?.readyState;\n if (readyState === 1 /* WebSocket.OPEN */) {\n return super.call(...args);\n }\n return Promise.reject(\n new Error(\n 'Tried to call a JSON-RPC method `' +\n args[0] +\n '` but the socket was not `CONNECTING` or `OPEN` (`readyState` was ' +\n readyState +\n ')',\n ),\n );\n }\n notify(\n ...args: Parameters\n ): ReturnType {\n const readyState = this.underlyingSocket?.readyState;\n if (readyState === 1 /* WebSocket.OPEN */) {\n return super.notify(...args);\n }\n return Promise.reject(\n new Error(\n 'Tried to send a JSON-RPC notification `' +\n args[0] +\n '` but the socket was not `CONNECTING` or `OPEN` (`readyState` was ' +\n readyState +\n ')',\n ),\n );\n }\n}\n","import * as BufferLayout from '@solana/buffer-layout';\n\nexport interface IAccountStateData {\n readonly typeIndex: number;\n}\n\n/**\n * @internal\n */\nexport type AccountType = {\n /** The account type index (from solana upstream program) */\n index: number;\n /** The BufferLayout to use to build data */\n layout: BufferLayout.Layout;\n};\n\n/**\n * Decode account data buffer using an AccountType\n * @internal\n */\nexport function decodeData(\n type: AccountType,\n data: Uint8Array,\n): TAccountStateData {\n let decoded: TAccountStateData;\n try {\n decoded = type.layout.decode(data);\n } catch (err) {\n throw new Error('invalid instruction; ' + err);\n }\n\n if (decoded.typeIndex !== type.index) {\n throw new Error(\n `invalid account data; account type mismatch ${decoded.typeIndex} != ${type.index}`,\n );\n }\n\n return decoded;\n}\n","import * as BufferLayout from '@solana/buffer-layout';\n\nimport assert from '../../utils/assert';\nimport * as Layout from '../../layout';\nimport {PublicKey} from '../../publickey';\nimport {u64} from '../../utils/bigint';\nimport {decodeData} from '../../account-data';\n\nexport type AddressLookupTableState = {\n deactivationSlot: bigint;\n lastExtendedSlot: number;\n lastExtendedSlotStartIndex: number;\n authority?: PublicKey;\n addresses: Array;\n};\n\nexport type AddressLookupTableAccountArgs = {\n key: PublicKey;\n state: AddressLookupTableState;\n};\n\n/// The serialized size of lookup table metadata\nconst LOOKUP_TABLE_META_SIZE = 56;\n\nexport class AddressLookupTableAccount {\n key: PublicKey;\n state: AddressLookupTableState;\n\n constructor(args: AddressLookupTableAccountArgs) {\n this.key = args.key;\n this.state = args.state;\n }\n\n isActive(): boolean {\n const U64_MAX = BigInt('0xffffffffffffffff');\n return this.state.deactivationSlot === U64_MAX;\n }\n\n static deserialize(accountData: Uint8Array): AddressLookupTableState {\n const meta = decodeData(LookupTableMetaLayout, accountData);\n\n const serializedAddressesLen = accountData.length - LOOKUP_TABLE_META_SIZE;\n assert(serializedAddressesLen >= 0, 'lookup table is invalid');\n assert(serializedAddressesLen % 32 === 0, 'lookup table is invalid');\n\n const numSerializedAddresses = serializedAddressesLen / 32;\n const {addresses} = BufferLayout.struct<{addresses: Array}>([\n BufferLayout.seq(Layout.publicKey(), numSerializedAddresses, 'addresses'),\n ]).decode(accountData.slice(LOOKUP_TABLE_META_SIZE));\n\n return {\n deactivationSlot: meta.deactivationSlot,\n lastExtendedSlot: meta.lastExtendedSlot,\n lastExtendedSlotStartIndex: meta.lastExtendedStartIndex,\n authority:\n meta.authority.length !== 0\n ? new PublicKey(meta.authority[0])\n : undefined,\n addresses: addresses.map(address => new PublicKey(address)),\n };\n }\n}\n\nconst LookupTableMetaLayout = {\n index: 1,\n layout: BufferLayout.struct<{\n typeIndex: number;\n deactivationSlot: bigint;\n lastExtendedSlot: number;\n lastExtendedStartIndex: number;\n authority: Array;\n }>([\n BufferLayout.u32('typeIndex'),\n u64('deactivationSlot'),\n BufferLayout.nu64('lastExtendedSlot'),\n BufferLayout.u8('lastExtendedStartIndex'),\n BufferLayout.u8(), // option\n BufferLayout.seq(\n Layout.publicKey(),\n BufferLayout.offset(BufferLayout.u8(), -1),\n 'authority',\n ),\n ]),\n};\n","const URL_RE = /^[^:]+:\\/\\/([^:[]+|\\[[^\\]]+\\])(:\\d+)?(.*)/i;\n\nexport function makeWebsocketUrl(endpoint: string) {\n const matches = endpoint.match(URL_RE);\n if (matches == null) {\n throw TypeError(`Failed to validate endpoint URL \\`${endpoint}\\``);\n }\n const [\n _, // eslint-disable-line @typescript-eslint/no-unused-vars\n hostish,\n portWithColon,\n rest,\n ] = matches;\n const protocol = endpoint.startsWith('https:') ? 'wss:' : 'ws:';\n const startPort =\n portWithColon == null ? null : parseInt(portWithColon.slice(1), 10);\n const websocketPort =\n // Only shift the port by +1 as a convention for ws(s) only if given endpoint\n // is explicitly specifying the endpoint port (HTTP-based RPC), assuming\n // we're directly trying to connect to agave-validator's ws listening port.\n // When the endpoint omits the port, we're connecting to the protocol\n // default ports: http(80) or https(443) and it's assumed we're behind a reverse\n // proxy which manages WebSocket upgrade and backend port redirection.\n startPort == null ? '' : `:${startPort + 1}`;\n return `${protocol}//${hostish}${websocketPort}${rest}`;\n}\n","import HttpKeepAliveAgent, {\n HttpsAgent as HttpsKeepAliveAgent,\n} from 'agentkeepalive';\nimport bs58 from 'bs58';\nimport {Buffer} from 'buffer';\n// @ts-ignore\nimport fastStableStringify from 'fast-stable-stringify';\nimport type {Agent as NodeHttpAgent} from 'http';\nimport {Agent as NodeHttpsAgent} from 'https';\nimport {\n type as pick,\n number,\n string,\n array,\n boolean,\n literal,\n record,\n union,\n optional,\n nullable,\n coerce,\n instance,\n create,\n tuple,\n unknown,\n any,\n} from 'superstruct';\nimport type {Struct} from 'superstruct';\nimport RpcClient from 'jayson/lib/client/browser';\nimport {JSONRPCError} from 'jayson';\n\nimport {EpochSchedule} from './epoch-schedule';\nimport {SendTransactionError, SolanaJSONRPCError} from './errors';\nimport fetchImpl from './fetch-impl';\nimport {DurableNonce, NonceAccount} from './nonce-account';\nimport {PublicKey} from './publickey';\nimport {Signer} from './keypair';\nimport RpcWebSocketClient from './rpc-websocket';\nimport {MS_PER_SLOT} from './timing';\nimport {\n Transaction,\n TransactionStatus,\n TransactionVersion,\n VersionedTransaction,\n} from './transaction';\nimport {Message, MessageHeader, MessageV0, VersionedMessage} from './message';\nimport {AddressLookupTableAccount} from './programs/address-lookup-table/state';\nimport assert from './utils/assert';\nimport {sleep} from './utils/sleep';\nimport {toBuffer} from './utils/to-buffer';\nimport {\n TransactionExpiredBlockheightExceededError,\n TransactionExpiredNonceInvalidError,\n TransactionExpiredTimeoutError,\n} from './transaction/expiry-custom-errors';\nimport {makeWebsocketUrl} from './utils/makeWebsocketUrl';\nimport type {Blockhash} from './blockhash';\nimport type {FeeCalculator} from './fee-calculator';\nimport type {TransactionSignature} from './transaction';\nimport type {CompiledInstruction} from './message';\n\nconst PublicKeyFromString = coerce(\n instance(PublicKey),\n string(),\n value => new PublicKey(value),\n);\n\nconst RawAccountDataResult = tuple([string(), literal('base64')]);\n\nconst BufferFromRawAccountData = coerce(\n instance(Buffer),\n RawAccountDataResult,\n value => Buffer.from(value[0], 'base64'),\n);\n\n/**\n * Attempt to use a recent blockhash for up to 30 seconds\n * @internal\n */\nexport const BLOCKHASH_CACHE_TIMEOUT_MS = 30 * 1000;\n\n/**\n * HACK.\n * Copied from rpc-websockets/dist/lib/client.\n * Otherwise, `yarn build` fails with:\n * https://gist.github.com/steveluscher/c057eca81d479ef705cdb53162f9971d\n */\ninterface IWSRequestParams {\n [x: string]: any;\n [x: number]: any;\n}\n\ntype ClientSubscriptionId = number;\n/** @internal */ type ServerSubscriptionId = number;\n/** @internal */ type SubscriptionConfigHash = string;\n/** @internal */ type SubscriptionDisposeFn = () => Promise;\n/** @internal */ type SubscriptionStateChangeCallback = (\n nextState: StatefulSubscription['state'],\n) => void;\n/** @internal */ type SubscriptionStateChangeDisposeFn = () => void;\n/**\n * @internal\n * Every subscription contains the args used to open the subscription with\n * the server, and a list of callers interested in notifications.\n */\ntype BaseSubscription = Readonly<{\n args: IWSRequestParams;\n callbacks: Set['callback']>;\n}>;\n/**\n * @internal\n * A subscription may be in various states of connectedness. Only when it is\n * fully connected will it have a server subscription id associated with it.\n * This id can be returned to the server to unsubscribe the client entirely.\n */\ntype StatefulSubscription = Readonly<\n // New subscriptions that have not yet been\n // sent to the server start in this state.\n | {\n state: 'pending';\n }\n // These subscriptions have been sent to the server\n // and are waiting for the server to acknowledge them.\n | {\n state: 'subscribing';\n }\n // These subscriptions have been acknowledged by the\n // server and have been assigned server subscription ids.\n | {\n serverSubscriptionId: ServerSubscriptionId;\n state: 'subscribed';\n }\n // These subscriptions are intended to be torn down and\n // are waiting on an acknowledgement from the server.\n | {\n serverSubscriptionId: ServerSubscriptionId;\n state: 'unsubscribing';\n }\n // The request to tear down these subscriptions has been\n // acknowledged by the server. The `serverSubscriptionId`\n // is the id of the now-dead subscription.\n | {\n serverSubscriptionId: ServerSubscriptionId;\n state: 'unsubscribed';\n }\n>;\n/**\n * A type that encapsulates a subscription's RPC method\n * names and notification (callback) signature.\n */\ntype SubscriptionConfig = Readonly<\n | {\n callback: AccountChangeCallback;\n method: 'accountSubscribe';\n unsubscribeMethod: 'accountUnsubscribe';\n }\n | {\n callback: LogsCallback;\n method: 'logsSubscribe';\n unsubscribeMethod: 'logsUnsubscribe';\n }\n | {\n callback: ProgramAccountChangeCallback;\n method: 'programSubscribe';\n unsubscribeMethod: 'programUnsubscribe';\n }\n | {\n callback: RootChangeCallback;\n method: 'rootSubscribe';\n unsubscribeMethod: 'rootUnsubscribe';\n }\n | {\n callback: SignatureSubscriptionCallback;\n method: 'signatureSubscribe';\n unsubscribeMethod: 'signatureUnsubscribe';\n }\n | {\n callback: SlotChangeCallback;\n method: 'slotSubscribe';\n unsubscribeMethod: 'slotUnsubscribe';\n }\n | {\n callback: SlotUpdateCallback;\n method: 'slotsUpdatesSubscribe';\n unsubscribeMethod: 'slotsUpdatesUnsubscribe';\n }\n>;\n/**\n * @internal\n * Utility type that keeps tagged unions intact while omitting properties.\n */\ntype DistributiveOmit = T extends unknown\n ? Omit\n : never;\n/**\n * @internal\n * This type represents a single subscribable 'topic.' It's made up of:\n *\n * - The args used to open the subscription with the server,\n * - The state of the subscription, in terms of its connectedness, and\n * - The set of callbacks to call when the server publishes notifications\n *\n * This record gets indexed by `SubscriptionConfigHash` and is used to\n * set up subscriptions, fan out notifications, and track subscription state.\n */\ntype Subscription = BaseSubscription &\n StatefulSubscription &\n DistributiveOmit;\n\ntype RpcRequest = (methodName: string, args: Array) => Promise;\n\ntype RpcBatchRequest = (requests: RpcParams[]) => Promise;\n\n/**\n * @internal\n */\nexport type RpcParams = {\n methodName: string;\n args: Array;\n};\n\nexport type TokenAccountsFilter =\n | {\n mint: PublicKey;\n }\n | {\n programId: PublicKey;\n };\n\n/**\n * Extra contextual information for RPC responses\n */\nexport type Context = {\n slot: number;\n};\n\n/**\n * Options for sending transactions\n */\nexport type SendOptions = {\n /** disable transaction verification step */\n skipPreflight?: boolean;\n /** preflight commitment level */\n preflightCommitment?: Commitment;\n /** Maximum number of times for the RPC node to retry sending the transaction to the leader. */\n maxRetries?: number;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Options for confirming transactions\n */\nexport type ConfirmOptions = {\n /** disable transaction verification step */\n skipPreflight?: boolean;\n /** desired commitment level */\n commitment?: Commitment;\n /** preflight commitment level */\n preflightCommitment?: Commitment;\n /** Maximum number of times for the RPC node to retry sending the transaction to the leader. */\n maxRetries?: number;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Options for getConfirmedSignaturesForAddress2\n */\nexport type ConfirmedSignaturesForAddress2Options = {\n /**\n * Start searching backwards from this transaction signature.\n * @remarks If not provided the search starts from the highest max confirmed block.\n */\n before?: TransactionSignature;\n /** Search until this transaction signature is reached, if found before `limit`. */\n until?: TransactionSignature;\n /** Maximum transaction signatures to return (between 1 and 1,000, default: 1,000). */\n limit?: number;\n};\n\n/**\n * Options for getSignaturesForAddress\n */\nexport type SignaturesForAddressOptions = {\n /**\n * Start searching backwards from this transaction signature.\n * @remarks If not provided the search starts from the highest max confirmed block.\n */\n before?: TransactionSignature;\n /** Search until this transaction signature is reached, if found before `limit`. */\n until?: TransactionSignature;\n /** Maximum transaction signatures to return (between 1 and 1,000, default: 1,000). */\n limit?: number;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * RPC Response with extra contextual information\n */\nexport type RpcResponseAndContext = {\n /** response context */\n context: Context;\n /** response value */\n value: T;\n};\n\nexport type BlockhashWithExpiryBlockHeight = Readonly<{\n blockhash: Blockhash;\n lastValidBlockHeight: number;\n}>;\n\n/**\n * A strategy for confirming transactions that uses the last valid\n * block height for a given blockhash to check for transaction expiration.\n */\nexport type BlockheightBasedTransactionConfirmationStrategy =\n BaseTransactionConfirmationStrategy & BlockhashWithExpiryBlockHeight;\n\n/**\n * A strategy for confirming durable nonce transactions.\n */\nexport type DurableNonceTransactionConfirmationStrategy =\n BaseTransactionConfirmationStrategy & {\n /**\n * The lowest slot at which to fetch the nonce value from the\n * nonce account. This should be no lower than the slot at\n * which the last-known value of the nonce was fetched.\n */\n minContextSlot: number;\n /**\n * The account where the current value of the nonce is stored.\n */\n nonceAccountPubkey: PublicKey;\n /**\n * The nonce value that was used to sign the transaction\n * for which confirmation is being sought.\n */\n nonceValue: DurableNonce;\n };\n\n/**\n * Properties shared by all transaction confirmation strategies\n */\nexport type BaseTransactionConfirmationStrategy = Readonly<{\n /** A signal that, when aborted, cancels any outstanding transaction confirmation operations */\n abortSignal?: AbortSignal;\n signature: TransactionSignature;\n}>;\n\n/**\n * This type represents all transaction confirmation strategies\n */\nexport type TransactionConfirmationStrategy =\n | BlockheightBasedTransactionConfirmationStrategy\n | DurableNonceTransactionConfirmationStrategy;\n\n/* @internal */\nfunction assertEndpointUrl(putativeUrl: string) {\n if (/^https?:/.test(putativeUrl) === false) {\n throw new TypeError('Endpoint URL must start with `http:` or `https:`.');\n }\n return putativeUrl;\n}\n\n/** @internal */\nfunction extractCommitmentFromConfig(\n commitmentOrConfig?: Commitment | ({commitment?: Commitment} & TConfig),\n) {\n let commitment: Commitment | undefined;\n let config: Omit | undefined;\n if (typeof commitmentOrConfig === 'string') {\n commitment = commitmentOrConfig;\n } else if (commitmentOrConfig) {\n const {commitment: specifiedCommitment, ...specifiedConfig} =\n commitmentOrConfig;\n commitment = specifiedCommitment;\n config = specifiedConfig;\n }\n return {commitment, config};\n}\n\n/**\n * @internal\n */\nfunction applyDefaultMemcmpEncodingToFilters(\n filters: GetProgramAccountsFilter[],\n): GetProgramAccountsFilter[] {\n return filters.map(filter =>\n 'memcmp' in filter\n ? {\n ...filter,\n memcmp: {\n ...filter.memcmp,\n encoding: filter.memcmp.encoding ?? 'base58',\n },\n }\n : filter,\n );\n}\n\n/**\n * @internal\n */\nfunction createRpcResult(result: Struct) {\n return union([\n pick({\n jsonrpc: literal('2.0'),\n id: string(),\n result,\n }),\n pick({\n jsonrpc: literal('2.0'),\n id: string(),\n error: pick({\n code: unknown(),\n message: string(),\n data: optional(any()),\n }),\n }),\n ]);\n}\n\nconst UnknownRpcResult = createRpcResult(unknown());\n\n/**\n * @internal\n */\nfunction jsonRpcResult(schema: Struct) {\n return coerce(createRpcResult(schema), UnknownRpcResult, value => {\n if ('error' in value) {\n return value;\n } else {\n return {\n ...value,\n result: create(value.result, schema),\n };\n }\n });\n}\n\n/**\n * @internal\n */\nfunction jsonRpcResultAndContext(value: Struct) {\n return jsonRpcResult(\n pick({\n context: pick({\n slot: number(),\n }),\n value,\n }),\n );\n}\n\n/**\n * @internal\n */\nfunction notificationResultAndContext(value: Struct) {\n return pick({\n context: pick({\n slot: number(),\n }),\n value,\n });\n}\n\n/**\n * @internal\n */\nfunction versionedMessageFromResponse(\n version: TransactionVersion | undefined,\n response: MessageResponse,\n): VersionedMessage {\n if (version === 0) {\n return new MessageV0({\n header: response.header,\n staticAccountKeys: response.accountKeys.map(\n accountKey => new PublicKey(accountKey),\n ),\n recentBlockhash: response.recentBlockhash,\n compiledInstructions: response.instructions.map(ix => ({\n programIdIndex: ix.programIdIndex,\n accountKeyIndexes: ix.accounts,\n data: bs58.decode(ix.data),\n })),\n addressTableLookups: response.addressTableLookups!,\n });\n } else {\n return new Message(response);\n }\n}\n\n/**\n * The level of commitment desired when querying state\n *
\n *   'processed': Query the most recent block which has reached 1 confirmation by the connected node\n *   'confirmed': Query the most recent block which has reached 1 confirmation by the cluster\n *   'finalized': Query the most recent block which has been finalized by the cluster\n * 
\n */\nexport type Commitment =\n | 'processed'\n | 'confirmed'\n | 'finalized'\n | 'recent' // Deprecated as of v1.5.5\n | 'single' // Deprecated as of v1.5.5\n | 'singleGossip' // Deprecated as of v1.5.5\n | 'root' // Deprecated as of v1.5.5\n | 'max'; // Deprecated as of v1.5.5\n\n/**\n * A subset of Commitment levels, which are at least optimistically confirmed\n *
\n *   'confirmed': Query the most recent block which has reached 1 confirmation by the cluster\n *   'finalized': Query the most recent block which has been finalized by the cluster\n * 
\n */\nexport type Finality = 'confirmed' | 'finalized';\n\n/**\n * Filter for largest accounts query\n *
\n *   'circulating':    Return the largest accounts that are part of the circulating supply\n *   'nonCirculating': Return the largest accounts that are not part of the circulating supply\n * 
\n */\nexport type LargestAccountsFilter = 'circulating' | 'nonCirculating';\n\n/**\n * Configuration object for changing `getAccountInfo` query behavior\n */\nexport type GetAccountInfoConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n /** Optional data slice to limit the returned account data */\n dataSlice?: DataSlice;\n};\n\n/**\n * Configuration object for changing `getBalance` query behavior\n */\nexport type GetBalanceConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for changing `getBlock` query behavior\n */\nexport type GetBlockConfig = {\n /** The level of finality desired */\n commitment?: Finality;\n /**\n * Whether to populate the rewards array. If parameter not provided, the default includes rewards.\n */\n rewards?: boolean;\n /**\n * Level of transaction detail to return, either \"full\", \"accounts\", \"signatures\", or \"none\". If\n * parameter not provided, the default detail level is \"full\". If \"accounts\" are requested,\n * transaction details only include signatures and an annotated list of accounts in each\n * transaction. Transaction metadata is limited to only: fee, err, pre_balances, post_balances,\n * pre_token_balances, and post_token_balances.\n */\n transactionDetails?: 'accounts' | 'full' | 'none' | 'signatures';\n};\n\n/**\n * Configuration object for changing `getBlock` query behavior\n */\nexport type GetVersionedBlockConfig = {\n /** The level of finality desired */\n commitment?: Finality;\n /** The max transaction version to return in responses. If the requested transaction is a higher version, an error will be returned */\n maxSupportedTransactionVersion?: number;\n /**\n * Whether to populate the rewards array. If parameter not provided, the default includes rewards.\n */\n rewards?: boolean;\n /**\n * Level of transaction detail to return, either \"full\", \"accounts\", \"signatures\", or \"none\". If\n * parameter not provided, the default detail level is \"full\". If \"accounts\" are requested,\n * transaction details only include signatures and an annotated list of accounts in each\n * transaction. Transaction metadata is limited to only: fee, err, pre_balances, post_balances,\n * pre_token_balances, and post_token_balances.\n */\n transactionDetails?: 'accounts' | 'full' | 'none' | 'signatures';\n};\n\n/**\n * Configuration object for changing `getStakeMinimumDelegation` query behavior\n */\nexport type GetStakeMinimumDelegationConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n};\n\n/**\n * Configuration object for changing `getBlockHeight` query behavior\n */\nexport type GetBlockHeightConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for changing `getEpochInfo` query behavior\n */\nexport type GetEpochInfoConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for changing `getInflationReward` query behavior\n */\nexport type GetInflationRewardConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** An epoch for which the reward occurs. If omitted, the previous epoch will be used */\n epoch?: number;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for changing `getLatestBlockhash` query behavior\n */\nexport type GetLatestBlockhashConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for changing `isBlockhashValid` query behavior\n */\nexport type IsBlockhashValidConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for changing `getSlot` query behavior\n */\nexport type GetSlotConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for changing `getSlotLeader` query behavior\n */\nexport type GetSlotLeaderConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for changing `getTransaction` query behavior\n */\nexport type GetTransactionConfig = {\n /** The level of finality desired */\n commitment?: Finality;\n};\n\n/**\n * Configuration object for changing `getTransaction` query behavior\n */\nexport type GetVersionedTransactionConfig = {\n /** The level of finality desired */\n commitment?: Finality;\n /** The max transaction version to return in responses. If the requested transaction is a higher version, an error will be returned */\n maxSupportedTransactionVersion?: number;\n};\n\n/**\n * Configuration object for changing `getLargestAccounts` query behavior\n */\nexport type GetLargestAccountsConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** Filter largest accounts by whether they are part of the circulating supply */\n filter?: LargestAccountsFilter;\n};\n\n/**\n * Configuration object for changing `getSupply` request behavior\n */\nexport type GetSupplyConfig = {\n /** The level of commitment desired */\n commitment?: Commitment;\n /** Exclude non circulating accounts list from response */\n excludeNonCirculatingAccountsList?: boolean;\n};\n\n/**\n * Configuration object for changing query behavior\n */\nexport type SignatureStatusConfig = {\n /** enable searching status history, not needed for recent transactions */\n searchTransactionHistory: boolean;\n};\n\n/**\n * Information describing a cluster node\n */\nexport type ContactInfo = {\n /** Identity public key of the node */\n pubkey: string;\n /** Gossip network address for the node */\n gossip: string | null;\n /** TPU network address for the node (null if not available) */\n tpu: string | null;\n /** JSON RPC network address for the node (null if not available) */\n rpc: string | null;\n /** Software version of the node (null if not available) */\n version: string | null;\n};\n\n/**\n * Information describing a vote account\n */\nexport type VoteAccountInfo = {\n /** Public key of the vote account */\n votePubkey: string;\n /** Identity public key of the node voting with this account */\n nodePubkey: string;\n /** The stake, in lamports, delegated to this vote account and activated */\n activatedStake: number;\n /** Whether the vote account is staked for this epoch */\n epochVoteAccount: boolean;\n /** Recent epoch voting credit history for this voter */\n epochCredits: Array<[number, number, number]>;\n /** A percentage (0-100) of rewards payout owed to the voter */\n commission: number;\n /** Most recent slot voted on by this vote account */\n lastVote: number;\n};\n\n/**\n * A collection of cluster vote accounts\n */\nexport type VoteAccountStatus = {\n /** Active vote accounts */\n current: Array;\n /** Inactive vote accounts */\n delinquent: Array;\n};\n\n/**\n * Network Inflation\n * (see https://docs.solana.com/implemented-proposals/ed_overview)\n */\nexport type InflationGovernor = {\n foundation: number;\n foundationTerm: number;\n initial: number;\n taper: number;\n terminal: number;\n};\n\nconst GetInflationGovernorResult = pick({\n foundation: number(),\n foundationTerm: number(),\n initial: number(),\n taper: number(),\n terminal: number(),\n});\n\n/**\n * The inflation reward for an epoch\n */\nexport type InflationReward = {\n /** epoch for which the reward occurs */\n epoch: number;\n /** the slot in which the rewards are effective */\n effectiveSlot: number;\n /** reward amount in lamports */\n amount: number;\n /** post balance of the account in lamports */\n postBalance: number;\n /** vote account commission when the reward was credited */\n commission?: number | null;\n};\n\n/**\n * Expected JSON RPC response for the \"getInflationReward\" message\n */\nconst GetInflationRewardResult = jsonRpcResult(\n array(\n nullable(\n pick({\n epoch: number(),\n effectiveSlot: number(),\n amount: number(),\n postBalance: number(),\n commission: optional(nullable(number())),\n }),\n ),\n ),\n);\n\nexport type RecentPrioritizationFees = {\n /** slot in which the fee was observed */\n slot: number;\n /** the per-compute-unit fee paid by at least one successfully landed transaction, specified in increments of 0.000001 lamports*/\n prioritizationFee: number;\n};\n\n/**\n * Configuration object for changing `getRecentPrioritizationFees` query behavior\n */\nexport type GetRecentPrioritizationFeesConfig = {\n /**\n * If this parameter is provided, the response will reflect a fee to land a transaction locking\n * all of the provided accounts as writable.\n */\n lockedWritableAccounts?: PublicKey[];\n};\n\n/**\n * Expected JSON RPC response for the \"getRecentPrioritizationFees\" message\n */\nconst GetRecentPrioritizationFeesResult = array(\n pick({\n slot: number(),\n prioritizationFee: number(),\n }),\n);\n\nexport type InflationRate = {\n /** total inflation */\n total: number;\n /** inflation allocated to validators */\n validator: number;\n /** inflation allocated to the foundation */\n foundation: number;\n /** epoch for which these values are valid */\n epoch: number;\n};\n\n/**\n * Expected JSON RPC response for the \"getInflationRate\" message\n */\nconst GetInflationRateResult = pick({\n total: number(),\n validator: number(),\n foundation: number(),\n epoch: number(),\n});\n\n/**\n * Information about the current epoch\n */\nexport type EpochInfo = {\n epoch: number;\n slotIndex: number;\n slotsInEpoch: number;\n absoluteSlot: number;\n blockHeight?: number;\n transactionCount?: number;\n};\n\nconst GetEpochInfoResult = pick({\n epoch: number(),\n slotIndex: number(),\n slotsInEpoch: number(),\n absoluteSlot: number(),\n blockHeight: optional(number()),\n transactionCount: optional(number()),\n});\n\nconst GetEpochScheduleResult = pick({\n slotsPerEpoch: number(),\n leaderScheduleSlotOffset: number(),\n warmup: boolean(),\n firstNormalEpoch: number(),\n firstNormalSlot: number(),\n});\n\n/**\n * Leader schedule\n * (see https://docs.solana.com/terminology#leader-schedule)\n */\nexport type LeaderSchedule = {\n [address: string]: number[];\n};\n\nconst GetLeaderScheduleResult = record(string(), array(number()));\n\n/**\n * Transaction error or null\n */\nconst TransactionErrorResult = nullable(union([pick({}), string()]));\n\n/**\n * Signature status for a transaction\n */\nconst SignatureStatusResult = pick({\n err: TransactionErrorResult,\n});\n\n/**\n * Transaction signature received notification\n */\nconst SignatureReceivedResult = literal('receivedSignature');\n\n/**\n * Version info for a node\n */\nexport type Version = {\n /** Version of solana-core */\n 'solana-core': string;\n 'feature-set'?: number;\n};\n\nconst VersionResult = pick({\n 'solana-core': string(),\n 'feature-set': optional(number()),\n});\n\nexport type SimulatedTransactionAccountInfo = {\n /** `true` if this account's data contains a loaded program */\n executable: boolean;\n /** Identifier of the program that owns the account */\n owner: string;\n /** Number of lamports assigned to the account */\n lamports: number;\n /** Optional data assigned to the account */\n data: string[];\n /** Optional rent epoch info for account */\n rentEpoch?: number;\n};\n\nexport type TransactionReturnDataEncoding = 'base64';\n\nexport type TransactionReturnData = {\n programId: string;\n data: [string, TransactionReturnDataEncoding];\n};\n\nexport type SimulateTransactionConfig = {\n /** Optional parameter used to enable signature verification before simulation */\n sigVerify?: boolean;\n /** Optional parameter used to replace the simulated transaction's recent blockhash with the latest blockhash */\n replaceRecentBlockhash?: boolean;\n /** Optional parameter used to set the commitment level when selecting the latest block */\n commitment?: Commitment;\n /** Optional parameter used to specify a list of base58-encoded account addresses to return post simulation state for */\n accounts?: {\n /** The encoding of the returned account's data */\n encoding: 'base64';\n addresses: string[];\n };\n /** Optional parameter used to specify the minimum block slot that can be used for simulation */\n minContextSlot?: number;\n /** Optional parameter used to include inner instructions in the simulation */\n innerInstructions?: boolean;\n};\n\nexport type SimulatedTransactionResponse = {\n err: TransactionError | string | null;\n logs: Array | null;\n accounts?: (SimulatedTransactionAccountInfo | null)[] | null;\n unitsConsumed?: number;\n returnData?: TransactionReturnData | null;\n innerInstructions?: ParsedInnerInstruction[] | null;\n};\nconst ParsedInstructionStruct = pick({\n program: string(),\n programId: PublicKeyFromString,\n parsed: unknown(),\n});\n\nconst PartiallyDecodedInstructionStruct = pick({\n programId: PublicKeyFromString,\n accounts: array(PublicKeyFromString),\n data: string(),\n});\n\nconst SimulatedTransactionResponseStruct = jsonRpcResultAndContext(\n pick({\n err: nullable(union([pick({}), string()])),\n logs: nullable(array(string())),\n accounts: optional(\n nullable(\n array(\n nullable(\n pick({\n executable: boolean(),\n owner: string(),\n lamports: number(),\n data: array(string()),\n rentEpoch: optional(number()),\n }),\n ),\n ),\n ),\n ),\n unitsConsumed: optional(number()),\n returnData: optional(\n nullable(\n pick({\n programId: string(),\n data: tuple([string(), literal('base64')]),\n }),\n ),\n ),\n innerInstructions: optional(\n nullable(\n array(\n pick({\n index: number(),\n instructions: array(\n union([\n ParsedInstructionStruct,\n PartiallyDecodedInstructionStruct,\n ]),\n ),\n }),\n ),\n ),\n ),\n }),\n);\n\nexport type ParsedInnerInstruction = {\n index: number;\n instructions: (ParsedInstruction | PartiallyDecodedInstruction)[];\n};\n\nexport type TokenBalance = {\n accountIndex: number;\n mint: string;\n owner?: string;\n programId?: string;\n uiTokenAmount: TokenAmount;\n};\n\n/**\n * Metadata for a parsed confirmed transaction on the ledger\n *\n * @deprecated Deprecated since RPC v1.8.0. Please use {@link ParsedTransactionMeta} instead.\n */\nexport type ParsedConfirmedTransactionMeta = ParsedTransactionMeta;\n\n/**\n * Collection of addresses loaded by a transaction using address table lookups\n */\nexport type LoadedAddresses = {\n writable: Array;\n readonly: Array;\n};\n\n/**\n * Metadata for a parsed transaction on the ledger\n */\nexport type ParsedTransactionMeta = {\n /** The fee charged for processing the transaction */\n fee: number;\n /** An array of cross program invoked parsed instructions */\n innerInstructions?: ParsedInnerInstruction[] | null;\n /** The balances of the transaction accounts before processing */\n preBalances: Array;\n /** The balances of the transaction accounts after processing */\n postBalances: Array;\n /** An array of program log messages emitted during a transaction */\n logMessages?: Array | null;\n /** The token balances of the transaction accounts before processing */\n preTokenBalances?: Array | null;\n /** The token balances of the transaction accounts after processing */\n postTokenBalances?: Array | null;\n /** The error result of transaction processing */\n err: TransactionError | null;\n /** The collection of addresses loaded using address lookup tables */\n loadedAddresses?: LoadedAddresses;\n /** The compute units consumed after processing the transaction */\n computeUnitsConsumed?: number;\n /** The cost units consumed after processing the transaction */\n costUnits?: number;\n};\n\nexport type CompiledInnerInstruction = {\n index: number;\n instructions: CompiledInstruction[];\n};\n\n/**\n * Metadata for a confirmed transaction on the ledger\n */\nexport type ConfirmedTransactionMeta = {\n /** The fee charged for processing the transaction */\n fee: number;\n /** An array of cross program invoked instructions */\n innerInstructions?: CompiledInnerInstruction[] | null;\n /** The balances of the transaction accounts before processing */\n preBalances: Array;\n /** The balances of the transaction accounts after processing */\n postBalances: Array;\n /** An array of program log messages emitted during a transaction */\n logMessages?: Array | null;\n /** The token balances of the transaction accounts before processing */\n preTokenBalances?: Array | null;\n /** The token balances of the transaction accounts after processing */\n postTokenBalances?: Array | null;\n /** The error result of transaction processing */\n err: TransactionError | null;\n /** The collection of addresses loaded using address lookup tables */\n loadedAddresses?: LoadedAddresses;\n /** The compute units consumed after processing the transaction */\n computeUnitsConsumed?: number;\n /** The cost units consumed after processing the transaction */\n costUnits?: number;\n};\n\n/**\n * A processed transaction from the RPC API\n */\nexport type TransactionResponse = {\n /** The slot during which the transaction was processed */\n slot: number;\n /** The transaction */\n transaction: {\n /** The transaction message */\n message: Message;\n /** The transaction signatures */\n signatures: string[];\n };\n /** Metadata produced from the transaction */\n meta: ConfirmedTransactionMeta | null;\n /** The unix timestamp of when the transaction was processed */\n blockTime?: number | null;\n};\n\n/**\n * A processed transaction from the RPC API\n */\nexport type VersionedTransactionResponse = {\n /** The slot during which the transaction was processed */\n slot: number;\n /** The transaction */\n transaction: {\n /** The transaction message */\n message: VersionedMessage;\n /** The transaction signatures */\n signatures: string[];\n };\n /** Metadata produced from the transaction */\n meta: ConfirmedTransactionMeta | null;\n /** The unix timestamp of when the transaction was processed */\n blockTime?: number | null;\n /** The transaction version */\n version?: TransactionVersion;\n};\n\n/**\n * A processed transaction message from the RPC API\n */\ntype MessageResponse = {\n accountKeys: string[];\n header: MessageHeader;\n instructions: CompiledInstruction[];\n recentBlockhash: string;\n addressTableLookups?: ParsedAddressTableLookup[];\n};\n\n/**\n * A confirmed transaction on the ledger\n *\n * @deprecated Deprecated since RPC v1.8.0.\n */\nexport type ConfirmedTransaction = {\n /** The slot during which the transaction was processed */\n slot: number;\n /** The details of the transaction */\n transaction: Transaction;\n /** Metadata produced from the transaction */\n meta: ConfirmedTransactionMeta | null;\n /** The unix timestamp of when the transaction was processed */\n blockTime?: number | null;\n};\n\n/**\n * A partially decoded transaction instruction\n */\nexport type PartiallyDecodedInstruction = {\n /** Program id called by this instruction */\n programId: PublicKey;\n /** Public keys of accounts passed to this instruction */\n accounts: Array;\n /** Raw base-58 instruction data */\n data: string;\n};\n\n/**\n * A parsed transaction message account\n */\nexport type ParsedMessageAccount = {\n /** Public key of the account */\n pubkey: PublicKey;\n /** Indicates if the account signed the transaction */\n signer: boolean;\n /** Indicates if the account is writable for this transaction */\n writable: boolean;\n /** Indicates if the account key came from the transaction or a lookup table */\n source?: 'transaction' | 'lookupTable';\n};\n\n/**\n * A parsed transaction instruction\n */\nexport type ParsedInstruction = {\n /** Name of the program for this instruction */\n program: string;\n /** ID of the program for this instruction */\n programId: PublicKey;\n /** Parsed instruction info */\n parsed: any;\n};\n\n/**\n * A parsed address table lookup\n */\nexport type ParsedAddressTableLookup = {\n /** Address lookup table account key */\n accountKey: PublicKey;\n /** Parsed instruction info */\n writableIndexes: number[];\n /** Parsed instruction info */\n readonlyIndexes: number[];\n};\n\n/**\n * A parsed transaction message\n */\nexport type ParsedMessage = {\n /** Accounts used in the instructions */\n accountKeys: ParsedMessageAccount[];\n /** The atomically executed instructions for the transaction */\n instructions: (ParsedInstruction | PartiallyDecodedInstruction)[];\n /** Recent blockhash */\n recentBlockhash: string;\n /** Address table lookups used to load additional accounts */\n addressTableLookups?: ParsedAddressTableLookup[] | null;\n};\n\n/**\n * A parsed transaction\n */\nexport type ParsedTransaction = {\n /** Signatures for the transaction */\n signatures: Array;\n /** Message of the transaction */\n message: ParsedMessage;\n};\n\n/**\n * A parsed and confirmed transaction on the ledger\n *\n * @deprecated Deprecated since RPC v1.8.0. Please use {@link ParsedTransactionWithMeta} instead.\n */\nexport type ParsedConfirmedTransaction = ParsedTransactionWithMeta;\n\n/**\n * A parsed transaction on the ledger with meta\n */\nexport type ParsedTransactionWithMeta = {\n /** The slot during which the transaction was processed */\n slot: number;\n /** The details of the transaction */\n transaction: ParsedTransaction;\n /** Metadata produced from the transaction */\n meta: ParsedTransactionMeta | null;\n /** The unix timestamp of when the transaction was processed */\n blockTime?: number | null;\n /** The version of the transaction message */\n version?: TransactionVersion;\n};\n\n/**\n * A processed block fetched from the RPC API\n */\nexport type BlockResponse = {\n /** Blockhash of this block */\n blockhash: Blockhash;\n /** Blockhash of this block's parent */\n previousBlockhash: Blockhash;\n /** Slot index of this block's parent */\n parentSlot: number;\n /** Vector of transactions with status meta and original message */\n transactions: Array<{\n /** The transaction */\n transaction: {\n /** The transaction message */\n message: Message;\n /** The transaction signatures */\n signatures: string[];\n };\n /** Metadata produced from the transaction */\n meta: ConfirmedTransactionMeta | null;\n /** The transaction version */\n version?: TransactionVersion;\n }>;\n /** Vector of block rewards */\n rewards?: Array<{\n /** Public key of reward recipient */\n pubkey: string;\n /** Reward value in lamports */\n lamports: number;\n /** Account balance after reward is applied */\n postBalance: number | null;\n /** Type of reward received */\n rewardType: string | null;\n /** Vote account commission when the reward was credited, only present for voting and staking rewards */\n commission?: number | null;\n }>;\n /** The unix timestamp of when the block was processed */\n blockTime: number | null;\n};\n\n/**\n * A processed block fetched from the RPC API where the `transactionDetails` mode is `accounts`\n */\nexport type AccountsModeBlockResponse = VersionedAccountsModeBlockResponse;\n\n/**\n * A processed block fetched from the RPC API where the `transactionDetails` mode is `none`\n */\nexport type NoneModeBlockResponse = VersionedNoneModeBlockResponse;\n\n/**\n * A block with parsed transactions\n */\nexport type ParsedBlockResponse = {\n /** Blockhash of this block */\n blockhash: Blockhash;\n /** Blockhash of this block's parent */\n previousBlockhash: Blockhash;\n /** Slot index of this block's parent */\n parentSlot: number;\n /** Vector of transactions with status meta and original message */\n transactions: Array<{\n /** The details of the transaction */\n transaction: ParsedTransaction;\n /** Metadata produced from the transaction */\n meta: ParsedTransactionMeta | null;\n /** The transaction version */\n version?: TransactionVersion;\n }>;\n /** Vector of block rewards */\n rewards?: Array<{\n /** Public key of reward recipient */\n pubkey: string;\n /** Reward value in lamports */\n lamports: number;\n /** Account balance after reward is applied */\n postBalance: number | null;\n /** Type of reward received */\n rewardType: string | null;\n /** Vote account commission when the reward was credited, only present for voting and staking rewards */\n commission?: number | null;\n }>;\n /** The unix timestamp of when the block was processed */\n blockTime: number | null;\n /** The number of blocks beneath this block */\n blockHeight: number | null;\n};\n\n/**\n * A block with parsed transactions where the `transactionDetails` mode is `accounts`\n */\nexport type ParsedAccountsModeBlockResponse = Omit<\n ParsedBlockResponse,\n 'transactions'\n> & {\n transactions: Array<\n Omit & {\n transaction: Pick<\n ParsedBlockResponse['transactions'][number]['transaction'],\n 'signatures'\n > & {\n accountKeys: ParsedMessageAccount[];\n };\n }\n >;\n};\n\n/**\n * A block with parsed transactions where the `transactionDetails` mode is `none`\n */\nexport type ParsedNoneModeBlockResponse = Omit<\n ParsedBlockResponse,\n 'transactions'\n>;\n\n/**\n * A processed block fetched from the RPC API\n */\nexport type VersionedBlockResponse = {\n /** Blockhash of this block */\n blockhash: Blockhash;\n /** Blockhash of this block's parent */\n previousBlockhash: Blockhash;\n /** Slot index of this block's parent */\n parentSlot: number;\n /** Vector of transactions with status meta and original message */\n transactions: Array<{\n /** The transaction */\n transaction: {\n /** The transaction message */\n message: VersionedMessage;\n /** The transaction signatures */\n signatures: string[];\n };\n /** Metadata produced from the transaction */\n meta: ConfirmedTransactionMeta | null;\n /** The transaction version */\n version?: TransactionVersion;\n }>;\n /** Vector of block rewards */\n rewards?: Array<{\n /** Public key of reward recipient */\n pubkey: string;\n /** Reward value in lamports */\n lamports: number;\n /** Account balance after reward is applied */\n postBalance: number | null;\n /** Type of reward received */\n rewardType: string | null;\n /** Vote account commission when the reward was credited, only present for voting and staking rewards */\n commission?: number | null;\n }>;\n /** The unix timestamp of when the block was processed */\n blockTime: number | null;\n};\n\n/**\n * A processed block fetched from the RPC API where the `transactionDetails` mode is `accounts`\n */\nexport type VersionedAccountsModeBlockResponse = Omit<\n VersionedBlockResponse,\n 'transactions'\n> & {\n transactions: Array<\n Omit & {\n transaction: Pick<\n VersionedBlockResponse['transactions'][number]['transaction'],\n 'signatures'\n > & {\n accountKeys: ParsedMessageAccount[];\n };\n }\n >;\n};\n\n/**\n * A processed block fetched from the RPC API where the `transactionDetails` mode is `none`\n */\nexport type VersionedNoneModeBlockResponse = Omit<\n VersionedBlockResponse,\n 'transactions'\n>;\n\n/**\n * A confirmed block on the ledger\n *\n * @deprecated Deprecated since RPC v1.8.0.\n */\nexport type ConfirmedBlock = {\n /** Blockhash of this block */\n blockhash: Blockhash;\n /** Blockhash of this block's parent */\n previousBlockhash: Blockhash;\n /** Slot index of this block's parent */\n parentSlot: number;\n /** Vector of transactions and status metas */\n transactions: Array<{\n transaction: Transaction;\n meta: ConfirmedTransactionMeta | null;\n }>;\n /** Vector of block rewards */\n rewards?: Array<{\n pubkey: string;\n lamports: number;\n postBalance: number | null;\n rewardType: string | null;\n commission?: number | null;\n }>;\n /** The unix timestamp of when the block was processed */\n blockTime: number | null;\n};\n\n/**\n * A Block on the ledger with signatures only\n */\nexport type BlockSignatures = {\n /** Blockhash of this block */\n blockhash: Blockhash;\n /** Blockhash of this block's parent */\n previousBlockhash: Blockhash;\n /** Slot index of this block's parent */\n parentSlot: number;\n /** Vector of signatures */\n signatures: Array;\n /** The unix timestamp of when the block was processed */\n blockTime: number | null;\n};\n\n/**\n * recent block production information\n */\nexport type BlockProduction = Readonly<{\n /** a dictionary of validator identities, as base-58 encoded strings. Value is a two element array containing the number of leader slots and the number of blocks produced */\n byIdentity: Readonly>>;\n /** Block production slot range */\n range: Readonly<{\n /** first slot of the block production information (inclusive) */\n firstSlot: number;\n /** last slot of block production information (inclusive) */\n lastSlot: number;\n }>;\n}>;\n\nexport type GetBlockProductionConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** Slot range to return block production for. If parameter not provided, defaults to current epoch. */\n range?: {\n /** first slot to return block production information for (inclusive) */\n firstSlot: number;\n /** last slot to return block production information for (inclusive). If parameter not provided, defaults to the highest slot */\n lastSlot?: number;\n };\n /** Only return results for this validator identity (base-58 encoded) */\n identity?: string;\n};\n\n/**\n * Expected JSON RPC response for the \"getBlockProduction\" message\n */\nconst BlockProductionResponseStruct = jsonRpcResultAndContext(\n pick({\n byIdentity: record(string(), array(number())),\n range: pick({\n firstSlot: number(),\n lastSlot: number(),\n }),\n }),\n);\n\n/**\n * A performance sample\n */\nexport type PerfSample = {\n /** Slot number of sample */\n slot: number;\n /** Number of transactions in a sample window */\n numTransactions: number;\n /** Number of slots in a sample window */\n numSlots: number;\n /** Sample window in seconds */\n samplePeriodSecs: number;\n};\n\nfunction createRpcClient(\n url: string,\n httpHeaders?: HttpHeaders,\n customFetch?: FetchFn,\n fetchMiddleware?: FetchMiddleware,\n disableRetryOnRateLimit?: boolean,\n httpAgent?: NodeHttpAgent | NodeHttpsAgent | false,\n): RpcClient {\n const fetch = customFetch ? customFetch : fetchImpl;\n let agent: NodeHttpAgent | NodeHttpsAgent | undefined;\n if (process.env.BROWSER) {\n if (httpAgent != null) {\n console.warn(\n 'You have supplied an `httpAgent` when creating a `Connection` in a browser environment.' +\n 'It has been ignored; `httpAgent` is only used in Node environments.',\n );\n }\n } else {\n if (httpAgent == null) {\n if (process.env.NODE_ENV !== 'test') {\n const agentOptions = {\n // One second fewer than the Solana RPC's keepalive timeout.\n // Read more: https://github.com/solana-labs/solana/issues/27859#issuecomment-1340097889\n freeSocketTimeout: 19000,\n keepAlive: true,\n maxSockets: 25,\n };\n if (url.startsWith('https:')) {\n agent = new HttpsKeepAliveAgent(agentOptions);\n } else {\n agent = new HttpKeepAliveAgent(agentOptions);\n }\n }\n } else {\n if (httpAgent !== false) {\n const isHttps = url.startsWith('https:');\n if (isHttps && !(httpAgent instanceof NodeHttpsAgent)) {\n throw new Error(\n 'The endpoint `' +\n url +\n '` can only be paired with an `https.Agent`. You have, instead, supplied an ' +\n '`http.Agent` through `httpAgent`.',\n );\n } else if (!isHttps && httpAgent instanceof NodeHttpsAgent) {\n throw new Error(\n 'The endpoint `' +\n url +\n '` can only be paired with an `http.Agent`. You have, instead, supplied an ' +\n '`https.Agent` through `httpAgent`.',\n );\n }\n agent = httpAgent;\n }\n }\n }\n\n let fetchWithMiddleware: FetchFn | undefined;\n\n if (fetchMiddleware) {\n fetchWithMiddleware = async (info, init) => {\n const modifiedFetchArgs = await new Promise>(\n (resolve, reject) => {\n try {\n fetchMiddleware(info, init, (modifiedInfo, modifiedInit) =>\n resolve([modifiedInfo, modifiedInit]),\n );\n } catch (error) {\n reject(error);\n }\n },\n );\n return await fetch(...modifiedFetchArgs);\n };\n }\n\n const clientBrowser = new RpcClient(async (request, callback) => {\n const options = {\n method: 'POST',\n body: request,\n agent,\n headers: Object.assign(\n {\n 'Content-Type': 'application/json',\n },\n httpHeaders || {},\n COMMON_HTTP_HEADERS,\n ),\n };\n\n try {\n let too_many_requests_retries = 5;\n let res: Response;\n let waitTime = 500;\n for (;;) {\n if (fetchWithMiddleware) {\n res = await fetchWithMiddleware(url, options);\n } else {\n res = await fetch(url, options);\n }\n\n if (res.status !== 429 /* Too many requests */) {\n break;\n }\n if (disableRetryOnRateLimit === true) {\n break;\n }\n too_many_requests_retries -= 1;\n if (too_many_requests_retries === 0) {\n break;\n }\n console.error(\n `Server responded with ${res.status} ${res.statusText}. Retrying after ${waitTime}ms delay...`,\n );\n await sleep(waitTime);\n waitTime *= 2;\n }\n\n const text = await res.text();\n if (res.ok) {\n callback(null, text);\n } else {\n callback(new Error(`${res.status} ${res.statusText}: ${text}`));\n }\n } catch (err) {\n if (err instanceof Error) callback(err);\n }\n }, {});\n\n return clientBrowser;\n}\n\nfunction createRpcRequest(client: RpcClient): RpcRequest {\n return (method, args) => {\n return new Promise((resolve, reject) => {\n client.request(method, args, (err: any, response: any) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(response);\n });\n });\n };\n}\n\nfunction createRpcBatchRequest(client: RpcClient): RpcBatchRequest {\n return (requests: RpcParams[]) => {\n return new Promise((resolve, reject) => {\n // Do nothing if requests is empty\n if (requests.length === 0) resolve([]);\n\n const batch = requests.map((params: RpcParams) => {\n return client.request(params.methodName, params.args);\n });\n\n client.request(batch, (err: any, response: any) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(response);\n });\n });\n };\n}\n\n/**\n * Expected JSON RPC response for the \"getInflationGovernor\" message\n */\nconst GetInflationGovernorRpcResult = jsonRpcResult(GetInflationGovernorResult);\n\n/**\n * Expected JSON RPC response for the \"getInflationRate\" message\n */\nconst GetInflationRateRpcResult = jsonRpcResult(GetInflationRateResult);\n\n/**\n * Expected JSON RPC response for the \"getRecentPrioritizationFees\" message\n */\nconst GetRecentPrioritizationFeesRpcResult = jsonRpcResult(\n GetRecentPrioritizationFeesResult,\n);\n\n/**\n * Expected JSON RPC response for the \"getEpochInfo\" message\n */\nconst GetEpochInfoRpcResult = jsonRpcResult(GetEpochInfoResult);\n\n/**\n * Expected JSON RPC response for the \"getEpochSchedule\" message\n */\nconst GetEpochScheduleRpcResult = jsonRpcResult(GetEpochScheduleResult);\n\n/**\n * Expected JSON RPC response for the \"getLeaderSchedule\" message\n */\nconst GetLeaderScheduleRpcResult = jsonRpcResult(GetLeaderScheduleResult);\n\n/**\n * Expected JSON RPC response for the \"minimumLedgerSlot\" and \"getFirstAvailableBlock\" messages\n */\nconst SlotRpcResult = jsonRpcResult(number());\n\n/**\n * Supply\n */\nexport type Supply = {\n /** Total supply in lamports */\n total: number;\n /** Circulating supply in lamports */\n circulating: number;\n /** Non-circulating supply in lamports */\n nonCirculating: number;\n /** List of non-circulating account addresses */\n nonCirculatingAccounts: Array;\n};\n\n/**\n * Expected JSON RPC response for the \"getSupply\" message\n */\nconst GetSupplyRpcResult = jsonRpcResultAndContext(\n pick({\n total: number(),\n circulating: number(),\n nonCirculating: number(),\n nonCirculatingAccounts: array(PublicKeyFromString),\n }),\n);\n\n/**\n * Token amount object which returns a token amount in different formats\n * for various client use cases.\n */\nexport type TokenAmount = {\n /** Raw amount of tokens as string ignoring decimals */\n amount: string;\n /** Number of decimals configured for token's mint */\n decimals: number;\n /** Token amount as float, accounts for decimals */\n uiAmount: number | null;\n /** Token amount as string, accounts for decimals */\n uiAmountString?: string;\n};\n\n/**\n * Expected JSON RPC structure for token amounts\n */\nconst TokenAmountResult = pick({\n amount: string(),\n uiAmount: nullable(number()),\n decimals: number(),\n uiAmountString: optional(string()),\n});\n\n/**\n * Token address and balance.\n */\nexport type TokenAccountBalancePair = {\n /** Address of the token account */\n address: PublicKey;\n /** Raw amount of tokens as string ignoring decimals */\n amount: string;\n /** Number of decimals configured for token's mint */\n decimals: number;\n /** Token amount as float, accounts for decimals */\n uiAmount: number | null;\n /** Token amount as string, accounts for decimals */\n uiAmountString?: string;\n};\n\n/**\n * Expected JSON RPC response for the \"getTokenLargestAccounts\" message\n */\nconst GetTokenLargestAccountsResult = jsonRpcResultAndContext(\n array(\n pick({\n address: PublicKeyFromString,\n amount: string(),\n uiAmount: nullable(number()),\n decimals: number(),\n uiAmountString: optional(string()),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"getTokenAccountsByOwner\" message\n */\nconst GetTokenAccountsByOwner = jsonRpcResultAndContext(\n array(\n pick({\n pubkey: PublicKeyFromString,\n account: pick({\n executable: boolean(),\n owner: PublicKeyFromString,\n lamports: number(),\n data: BufferFromRawAccountData,\n rentEpoch: number(),\n }),\n }),\n ),\n);\n\nconst ParsedAccountDataResult = pick({\n program: string(),\n parsed: unknown(),\n space: number(),\n});\n\n/**\n * Expected JSON RPC response for the \"getTokenAccountsByOwner\" message with parsed data\n */\nconst GetParsedTokenAccountsByOwner = jsonRpcResultAndContext(\n array(\n pick({\n pubkey: PublicKeyFromString,\n account: pick({\n executable: boolean(),\n owner: PublicKeyFromString,\n lamports: number(),\n data: ParsedAccountDataResult,\n rentEpoch: number(),\n }),\n }),\n ),\n);\n\n/**\n * Pair of an account address and its balance\n */\nexport type AccountBalancePair = {\n address: PublicKey;\n lamports: number;\n};\n\n/**\n * Expected JSON RPC response for the \"getLargestAccounts\" message\n */\nconst GetLargestAccountsRpcResult = jsonRpcResultAndContext(\n array(\n pick({\n lamports: number(),\n address: PublicKeyFromString,\n }),\n ),\n);\n\n/**\n * @internal\n */\nconst AccountInfoResult = pick({\n executable: boolean(),\n owner: PublicKeyFromString,\n lamports: number(),\n data: BufferFromRawAccountData,\n rentEpoch: number(),\n});\n\n/**\n * @internal\n */\nconst KeyedAccountInfoResult = pick({\n pubkey: PublicKeyFromString,\n account: AccountInfoResult,\n});\n\nconst ParsedOrRawAccountData = coerce(\n union([instance(Buffer), ParsedAccountDataResult]),\n union([RawAccountDataResult, ParsedAccountDataResult]),\n value => {\n if (Array.isArray(value)) {\n return create(value, BufferFromRawAccountData);\n } else {\n return value;\n }\n },\n);\n\n/**\n * @internal\n */\nconst ParsedAccountInfoResult = pick({\n executable: boolean(),\n owner: PublicKeyFromString,\n lamports: number(),\n data: ParsedOrRawAccountData,\n rentEpoch: number(),\n});\n\nconst KeyedParsedAccountInfoResult = pick({\n pubkey: PublicKeyFromString,\n account: ParsedAccountInfoResult,\n});\n\n/**\n * @internal\n */\nconst StakeActivationResult = pick({\n state: union([\n literal('active'),\n literal('inactive'),\n literal('activating'),\n literal('deactivating'),\n ]),\n active: number(),\n inactive: number(),\n});\n\n/**\n * Expected JSON RPC response for the \"getConfirmedSignaturesForAddress2\" message\n */\n\nconst GetConfirmedSignaturesForAddress2RpcResult = jsonRpcResult(\n array(\n pick({\n signature: string(),\n slot: number(),\n err: TransactionErrorResult,\n memo: nullable(string()),\n blockTime: optional(nullable(number())),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"getSignaturesForAddress\" message\n */\nconst GetSignaturesForAddressRpcResult = jsonRpcResult(\n array(\n pick({\n signature: string(),\n slot: number(),\n err: TransactionErrorResult,\n memo: nullable(string()),\n blockTime: optional(nullable(number())),\n }),\n ),\n);\n\n/***\n * Expected JSON RPC response for the \"accountNotification\" message\n */\nconst AccountNotificationResult = pick({\n subscription: number(),\n result: notificationResultAndContext(AccountInfoResult),\n});\n\n/**\n * @internal\n */\nconst ProgramAccountInfoResult = pick({\n pubkey: PublicKeyFromString,\n account: AccountInfoResult,\n});\n\n/***\n * Expected JSON RPC response for the \"programNotification\" message\n */\nconst ProgramAccountNotificationResult = pick({\n subscription: number(),\n result: notificationResultAndContext(ProgramAccountInfoResult),\n});\n\n/**\n * @internal\n */\nconst SlotInfoResult = pick({\n parent: number(),\n slot: number(),\n root: number(),\n});\n\n/**\n * Expected JSON RPC response for the \"slotNotification\" message\n */\nconst SlotNotificationResult = pick({\n subscription: number(),\n result: SlotInfoResult,\n});\n\n/**\n * Slot updates which can be used for tracking the live progress of a cluster.\n * - `\"firstShredReceived\"`: connected node received the first shred of a block.\n * Indicates that a new block that is being produced.\n * - `\"completed\"`: connected node has received all shreds of a block. Indicates\n * a block was recently produced.\n * - `\"optimisticConfirmation\"`: block was optimistically confirmed by the\n * cluster. It is not guaranteed that an optimistic confirmation notification\n * will be sent for every finalized blocks.\n * - `\"root\"`: the connected node rooted this block.\n * - `\"createdBank\"`: the connected node has started validating this block.\n * - `\"frozen\"`: the connected node has validated this block.\n * - `\"dead\"`: the connected node failed to validate this block.\n */\nexport type SlotUpdate =\n | {\n type: 'firstShredReceived';\n slot: number;\n timestamp: number;\n }\n | {\n type: 'completed';\n slot: number;\n timestamp: number;\n }\n | {\n type: 'createdBank';\n slot: number;\n timestamp: number;\n parent: number;\n }\n | {\n type: 'frozen';\n slot: number;\n timestamp: number;\n stats: {\n numTransactionEntries: number;\n numSuccessfulTransactions: number;\n numFailedTransactions: number;\n maxTransactionsPerEntry: number;\n };\n }\n | {\n type: 'dead';\n slot: number;\n timestamp: number;\n err: string;\n }\n | {\n type: 'optimisticConfirmation';\n slot: number;\n timestamp: number;\n }\n | {\n type: 'root';\n slot: number;\n timestamp: number;\n };\n\n/**\n * @internal\n */\nconst SlotUpdateResult = union([\n pick({\n type: union([\n literal('firstShredReceived'),\n literal('completed'),\n literal('optimisticConfirmation'),\n literal('root'),\n ]),\n slot: number(),\n timestamp: number(),\n }),\n pick({\n type: literal('createdBank'),\n parent: number(),\n slot: number(),\n timestamp: number(),\n }),\n pick({\n type: literal('frozen'),\n slot: number(),\n timestamp: number(),\n stats: pick({\n numTransactionEntries: number(),\n numSuccessfulTransactions: number(),\n numFailedTransactions: number(),\n maxTransactionsPerEntry: number(),\n }),\n }),\n pick({\n type: literal('dead'),\n slot: number(),\n timestamp: number(),\n err: string(),\n }),\n]);\n\n/**\n * Expected JSON RPC response for the \"slotsUpdatesNotification\" message\n */\nconst SlotUpdateNotificationResult = pick({\n subscription: number(),\n result: SlotUpdateResult,\n});\n\n/**\n * Expected JSON RPC response for the \"signatureNotification\" message\n */\nconst SignatureNotificationResult = pick({\n subscription: number(),\n result: notificationResultAndContext(\n union([SignatureStatusResult, SignatureReceivedResult]),\n ),\n});\n\n/**\n * Expected JSON RPC response for the \"rootNotification\" message\n */\nconst RootNotificationResult = pick({\n subscription: number(),\n result: number(),\n});\n\nconst ContactInfoResult = pick({\n pubkey: string(),\n gossip: nullable(string()),\n tpu: nullable(string()),\n rpc: nullable(string()),\n version: nullable(string()),\n});\n\nconst VoteAccountInfoResult = pick({\n votePubkey: string(),\n nodePubkey: string(),\n activatedStake: number(),\n epochVoteAccount: boolean(),\n epochCredits: array(tuple([number(), number(), number()])),\n commission: number(),\n lastVote: number(),\n rootSlot: nullable(number()),\n});\n\n/**\n * Expected JSON RPC response for the \"getVoteAccounts\" message\n */\nconst GetVoteAccounts = jsonRpcResult(\n pick({\n current: array(VoteAccountInfoResult),\n delinquent: array(VoteAccountInfoResult),\n }),\n);\n\nconst ConfirmationStatus = union([\n literal('processed'),\n literal('confirmed'),\n literal('finalized'),\n]);\n\nconst SignatureStatusResponse = pick({\n slot: number(),\n confirmations: nullable(number()),\n err: TransactionErrorResult,\n confirmationStatus: optional(ConfirmationStatus),\n});\n\n/**\n * Expected JSON RPC response for the \"getSignatureStatuses\" message\n */\nconst GetSignatureStatusesRpcResult = jsonRpcResultAndContext(\n array(nullable(SignatureStatusResponse)),\n);\n\n/**\n * Expected JSON RPC response for the \"getMinimumBalanceForRentExemption\" message\n */\nconst GetMinimumBalanceForRentExemptionRpcResult = jsonRpcResult(number());\n\nconst AddressTableLookupStruct = pick({\n accountKey: PublicKeyFromString,\n writableIndexes: array(number()),\n readonlyIndexes: array(number()),\n});\n\nconst ConfirmedTransactionResult = pick({\n signatures: array(string()),\n message: pick({\n accountKeys: array(string()),\n header: pick({\n numRequiredSignatures: number(),\n numReadonlySignedAccounts: number(),\n numReadonlyUnsignedAccounts: number(),\n }),\n instructions: array(\n pick({\n accounts: array(number()),\n data: string(),\n programIdIndex: number(),\n }),\n ),\n recentBlockhash: string(),\n addressTableLookups: optional(array(AddressTableLookupStruct)),\n }),\n});\n\nconst AnnotatedAccountKey = pick({\n pubkey: PublicKeyFromString,\n signer: boolean(),\n writable: boolean(),\n source: optional(union([literal('transaction'), literal('lookupTable')])),\n});\n\nconst ConfirmedTransactionAccountsModeResult = pick({\n accountKeys: array(AnnotatedAccountKey),\n signatures: array(string()),\n});\n\nconst ParsedInstructionResult = pick({\n parsed: unknown(),\n program: string(),\n programId: PublicKeyFromString,\n});\n\nconst RawInstructionResult = pick({\n accounts: array(PublicKeyFromString),\n data: string(),\n programId: PublicKeyFromString,\n});\n\nconst InstructionResult = union([\n RawInstructionResult,\n ParsedInstructionResult,\n]);\n\nconst UnknownInstructionResult = union([\n pick({\n parsed: unknown(),\n program: string(),\n programId: string(),\n }),\n pick({\n accounts: array(string()),\n data: string(),\n programId: string(),\n }),\n]);\n\nconst ParsedOrRawInstruction = coerce(\n InstructionResult,\n UnknownInstructionResult,\n value => {\n if ('accounts' in value) {\n return create(value, RawInstructionResult);\n } else {\n return create(value, ParsedInstructionResult);\n }\n },\n);\n\n/**\n * @internal\n */\nconst ParsedConfirmedTransactionResult = pick({\n signatures: array(string()),\n message: pick({\n accountKeys: array(AnnotatedAccountKey),\n instructions: array(ParsedOrRawInstruction),\n recentBlockhash: string(),\n addressTableLookups: optional(nullable(array(AddressTableLookupStruct))),\n }),\n});\n\nconst TokenBalanceResult = pick({\n accountIndex: number(),\n mint: string(),\n owner: optional(string()),\n programId: optional(string()),\n uiTokenAmount: TokenAmountResult,\n});\n\nconst LoadedAddressesResult = pick({\n writable: array(PublicKeyFromString),\n readonly: array(PublicKeyFromString),\n});\n\n/**\n * @internal\n */\nconst ConfirmedTransactionMetaResult = pick({\n err: TransactionErrorResult,\n fee: number(),\n innerInstructions: optional(\n nullable(\n array(\n pick({\n index: number(),\n instructions: array(\n pick({\n accounts: array(number()),\n data: string(),\n programIdIndex: number(),\n }),\n ),\n }),\n ),\n ),\n ),\n preBalances: array(number()),\n postBalances: array(number()),\n logMessages: optional(nullable(array(string()))),\n preTokenBalances: optional(nullable(array(TokenBalanceResult))),\n postTokenBalances: optional(nullable(array(TokenBalanceResult))),\n loadedAddresses: optional(LoadedAddressesResult),\n computeUnitsConsumed: optional(number()),\n costUnits: optional(number()),\n});\n\n/**\n * @internal\n */\nconst ParsedConfirmedTransactionMetaResult = pick({\n err: TransactionErrorResult,\n fee: number(),\n innerInstructions: optional(\n nullable(\n array(\n pick({\n index: number(),\n instructions: array(ParsedOrRawInstruction),\n }),\n ),\n ),\n ),\n preBalances: array(number()),\n postBalances: array(number()),\n logMessages: optional(nullable(array(string()))),\n preTokenBalances: optional(nullable(array(TokenBalanceResult))),\n postTokenBalances: optional(nullable(array(TokenBalanceResult))),\n loadedAddresses: optional(LoadedAddressesResult),\n computeUnitsConsumed: optional(number()),\n costUnits: optional(number()),\n});\n\nconst TransactionVersionStruct = union([literal(0), literal('legacy')]);\n\n/** @internal */\nconst RewardsResult = pick({\n pubkey: string(),\n lamports: number(),\n postBalance: nullable(number()),\n rewardType: nullable(string()),\n commission: optional(nullable(number())),\n});\n\n/**\n * Expected JSON RPC response for the \"getBlock\" message\n */\nconst GetBlockRpcResult = jsonRpcResult(\n nullable(\n pick({\n blockhash: string(),\n previousBlockhash: string(),\n parentSlot: number(),\n transactions: array(\n pick({\n transaction: ConfirmedTransactionResult,\n meta: nullable(ConfirmedTransactionMetaResult),\n version: optional(TransactionVersionStruct),\n }),\n ),\n rewards: optional(array(RewardsResult)),\n blockTime: nullable(number()),\n blockHeight: nullable(number()),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"getBlock\" message when `transactionDetails` is `none`\n */\nconst GetNoneModeBlockRpcResult = jsonRpcResult(\n nullable(\n pick({\n blockhash: string(),\n previousBlockhash: string(),\n parentSlot: number(),\n rewards: optional(array(RewardsResult)),\n blockTime: nullable(number()),\n blockHeight: nullable(number()),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"getBlock\" message when `transactionDetails` is `accounts`\n */\nconst GetAccountsModeBlockRpcResult = jsonRpcResult(\n nullable(\n pick({\n blockhash: string(),\n previousBlockhash: string(),\n parentSlot: number(),\n transactions: array(\n pick({\n transaction: ConfirmedTransactionAccountsModeResult,\n meta: nullable(ConfirmedTransactionMetaResult),\n version: optional(TransactionVersionStruct),\n }),\n ),\n rewards: optional(array(RewardsResult)),\n blockTime: nullable(number()),\n blockHeight: nullable(number()),\n }),\n ),\n);\n\n/**\n * Expected parsed JSON RPC response for the \"getBlock\" message\n */\nconst GetParsedBlockRpcResult = jsonRpcResult(\n nullable(\n pick({\n blockhash: string(),\n previousBlockhash: string(),\n parentSlot: number(),\n transactions: array(\n pick({\n transaction: ParsedConfirmedTransactionResult,\n meta: nullable(ParsedConfirmedTransactionMetaResult),\n version: optional(TransactionVersionStruct),\n }),\n ),\n rewards: optional(array(RewardsResult)),\n blockTime: nullable(number()),\n blockHeight: nullable(number()),\n }),\n ),\n);\n\n/**\n * Expected parsed JSON RPC response for the \"getBlock\" message when `transactionDetails` is `accounts`\n */\nconst GetParsedAccountsModeBlockRpcResult = jsonRpcResult(\n nullable(\n pick({\n blockhash: string(),\n previousBlockhash: string(),\n parentSlot: number(),\n transactions: array(\n pick({\n transaction: ConfirmedTransactionAccountsModeResult,\n meta: nullable(ParsedConfirmedTransactionMetaResult),\n version: optional(TransactionVersionStruct),\n }),\n ),\n rewards: optional(array(RewardsResult)),\n blockTime: nullable(number()),\n blockHeight: nullable(number()),\n }),\n ),\n);\n\n/**\n * Expected parsed JSON RPC response for the \"getBlock\" message when `transactionDetails` is `none`\n */\nconst GetParsedNoneModeBlockRpcResult = jsonRpcResult(\n nullable(\n pick({\n blockhash: string(),\n previousBlockhash: string(),\n parentSlot: number(),\n rewards: optional(array(RewardsResult)),\n blockTime: nullable(number()),\n blockHeight: nullable(number()),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"getConfirmedBlock\" message\n *\n * @deprecated Deprecated since RPC v1.8.0. Please use {@link GetBlockRpcResult} instead.\n */\nconst GetConfirmedBlockRpcResult = jsonRpcResult(\n nullable(\n pick({\n blockhash: string(),\n previousBlockhash: string(),\n parentSlot: number(),\n transactions: array(\n pick({\n transaction: ConfirmedTransactionResult,\n meta: nullable(ConfirmedTransactionMetaResult),\n }),\n ),\n rewards: optional(array(RewardsResult)),\n blockTime: nullable(number()),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"getBlock\" message\n */\nconst GetBlockSignaturesRpcResult = jsonRpcResult(\n nullable(\n pick({\n blockhash: string(),\n previousBlockhash: string(),\n parentSlot: number(),\n signatures: array(string()),\n blockTime: nullable(number()),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"getTransaction\" message\n */\nconst GetTransactionRpcResult = jsonRpcResult(\n nullable(\n pick({\n slot: number(),\n meta: nullable(ConfirmedTransactionMetaResult),\n blockTime: optional(nullable(number())),\n transaction: ConfirmedTransactionResult,\n version: optional(TransactionVersionStruct),\n }),\n ),\n);\n\n/**\n * Expected parsed JSON RPC response for the \"getTransaction\" message\n */\nconst GetParsedTransactionRpcResult = jsonRpcResult(\n nullable(\n pick({\n slot: number(),\n transaction: ParsedConfirmedTransactionResult,\n meta: nullable(ParsedConfirmedTransactionMetaResult),\n blockTime: optional(nullable(number())),\n version: optional(TransactionVersionStruct),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"getLatestBlockhash\" message\n */\nconst GetLatestBlockhashRpcResult = jsonRpcResultAndContext(\n pick({\n blockhash: string(),\n lastValidBlockHeight: number(),\n }),\n);\n\n/**\n * Expected JSON RPC response for the \"isBlockhashValid\" message\n */\nconst IsBlockhashValidRpcResult = jsonRpcResultAndContext(boolean());\n\nconst PerfSampleResult = pick({\n slot: number(),\n numTransactions: number(),\n numSlots: number(),\n samplePeriodSecs: number(),\n});\n\n/*\n * Expected JSON RPC response for \"getRecentPerformanceSamples\" message\n */\nconst GetRecentPerformanceSamplesRpcResult = jsonRpcResult(\n array(PerfSampleResult),\n);\n\n/**\n * Expected JSON RPC response for the \"getFeeCalculatorForBlockhash\" message\n */\nconst GetFeeCalculatorRpcResult = jsonRpcResultAndContext(\n nullable(\n pick({\n feeCalculator: pick({\n lamportsPerSignature: number(),\n }),\n }),\n ),\n);\n\n/**\n * Expected JSON RPC response for the \"requestAirdrop\" message\n */\nconst RequestAirdropRpcResult = jsonRpcResult(string());\n\n/**\n * Expected JSON RPC response for the \"sendTransaction\" message\n */\nconst SendTransactionRpcResult = jsonRpcResult(string());\n\n/**\n * Information about the latest slot being processed by a node\n */\nexport type SlotInfo = {\n /** Currently processing slot */\n slot: number;\n /** Parent of the current slot */\n parent: number;\n /** The root block of the current slot's fork */\n root: number;\n};\n\n/**\n * Parsed account data\n */\nexport type ParsedAccountData = {\n /** Name of the program that owns this account */\n program: string;\n /** Parsed account data */\n parsed: any;\n /** Space used by account data */\n space: number;\n};\n\n/**\n * Stake Activation data\n */\nexport type StakeActivationData = {\n /** the stake account's activation state */\n state: 'active' | 'inactive' | 'activating' | 'deactivating';\n /** stake active during the epoch */\n active: number;\n /** stake inactive during the epoch */\n inactive: number;\n};\n\n/**\n * Data slice argument for getProgramAccounts\n */\nexport type DataSlice = {\n /** offset of data slice */\n offset: number;\n /** length of data slice */\n length: number;\n};\n\n/**\n * Memory comparison filter for getProgramAccounts\n */\nexport type MemcmpFilter = {\n memcmp: {\n /** offset into program account data to start comparison */\n offset: number;\n } & (\n | {\n encoding?: 'base58'; // Base-58 is the default when not supplied.\n /** data to match, as base-58 encoded string and limited to less than 129 bytes */\n bytes: string;\n }\n | {\n encoding: 'base64';\n /** data to match, as base-64 encoded string */\n bytes: string;\n }\n );\n};\n\n/**\n * Data size comparison filter for getProgramAccounts\n */\nexport type DataSizeFilter = {\n /** Size of data for program account data length comparison */\n dataSize: number;\n};\n\n/**\n * A filter object for getProgramAccounts\n */\nexport type GetProgramAccountsFilter = MemcmpFilter | DataSizeFilter;\n\n/**\n * Configuration object for getProgramAccounts requests\n */\nexport type GetProgramAccountsConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** Optional encoding for account data (default base64)\n * To use \"jsonParsed\" encoding, please refer to `getParsedProgramAccounts` in connection.ts\n * */\n encoding?: 'base64';\n /** Optional data slice to limit the returned account data */\n dataSlice?: DataSlice;\n /** Optional array of filters to apply to accounts */\n filters?: GetProgramAccountsFilter[];\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n /** wrap the result in an RpcResponse JSON object */\n withContext?: boolean;\n};\n\nexport type GetProgramAccountsResponse = readonly Readonly<{\n account: AccountInfo;\n /** the account Pubkey as base-58 encoded string */\n pubkey: PublicKey;\n}>[];\n\n/**\n * Configuration object for getParsedProgramAccounts\n */\nexport type GetParsedProgramAccountsConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** Optional array of filters to apply to accounts */\n filters?: GetProgramAccountsFilter[];\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for getMultipleAccounts\n */\nexport type GetMultipleAccountsConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n /** Optional data slice to limit the returned account data */\n dataSlice?: DataSlice;\n};\n\n/**\n * Configuration object for `getStakeActivation`\n */\nexport type GetStakeActivationConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** Epoch for which to calculate activation details. If parameter not provided, defaults to current epoch */\n epoch?: number;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for `getStakeActivation`\n */\nexport type GetTokenAccountsByOwnerConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for `getStakeActivation`\n */\nexport type GetTransactionCountConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for `getNonce`\n */\nexport type GetNonceConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\n/**\n * Configuration object for `getNonceAndContext`\n */\nexport type GetNonceAndContextConfig = {\n /** Optional commitment level */\n commitment?: Commitment;\n /** The minimum slot that the request can be evaluated at */\n minContextSlot?: number;\n};\n\nexport type AccountSubscriptionConfig = Readonly<{\n /** Optional commitment level */\n commitment?: Commitment;\n /**\n * Encoding format for Account data\n * - `base58` is slow.\n * - `jsonParsed` encoding attempts to use program-specific state parsers to return more\n * human-readable and explicit account state data\n * - If `jsonParsed` is requested but a parser cannot be found, the field falls back to `base64`\n * encoding, detectable when the `data` field is type `string`.\n */\n encoding?: 'base58' | 'base64' | 'base64+zstd' | 'jsonParsed';\n}>;\n\nexport type ProgramAccountSubscriptionConfig = Readonly<{\n /** Optional commitment level */\n commitment?: Commitment;\n /**\n * Encoding format for Account data\n * - `base58` is slow.\n * - `jsonParsed` encoding attempts to use program-specific state parsers to return more\n * human-readable and explicit account state data\n * - If `jsonParsed` is requested but a parser cannot be found, the field falls back to `base64`\n * encoding, detectable when the `data` field is type `string`.\n */\n encoding?: 'base58' | 'base64' | 'base64+zstd' | 'jsonParsed';\n /**\n * Filter results using various filter objects\n * The resultant account must meet ALL filter criteria to be included in the returned results\n */\n filters?: GetProgramAccountsFilter[];\n}>;\n\n/**\n * Information describing an account\n */\nexport type AccountInfo = {\n /** `true` if this account's data contains a loaded program */\n executable: boolean;\n /** Identifier of the program that owns the account */\n owner: PublicKey;\n /** Number of lamports assigned to the account */\n lamports: number;\n /** Optional data assigned to the account */\n data: T;\n /** Optional rent epoch info for account */\n rentEpoch?: number;\n};\n\n/**\n * Account information identified by pubkey\n */\nexport type KeyedAccountInfo = {\n accountId: PublicKey;\n accountInfo: AccountInfo;\n};\n\n/**\n * Callback function for account change notifications\n */\nexport type AccountChangeCallback = (\n accountInfo: AccountInfo,\n context: Context,\n) => void;\n\n/**\n * Callback function for program account change notifications\n */\nexport type ProgramAccountChangeCallback = (\n keyedAccountInfo: KeyedAccountInfo,\n context: Context,\n) => void;\n\n/**\n * Callback function for slot change notifications\n */\nexport type SlotChangeCallback = (slotInfo: SlotInfo) => void;\n\n/**\n * Callback function for slot update notifications\n */\nexport type SlotUpdateCallback = (slotUpdate: SlotUpdate) => void;\n\n/**\n * Callback function for signature status notifications\n */\nexport type SignatureResultCallback = (\n signatureResult: SignatureResult,\n context: Context,\n) => void;\n\n/**\n * Signature status notification with transaction result\n */\nexport type SignatureStatusNotification = {\n type: 'status';\n result: SignatureResult;\n};\n\n/**\n * Signature received notification\n */\nexport type SignatureReceivedNotification = {\n type: 'received';\n};\n\n/**\n * Callback function for signature notifications\n */\nexport type SignatureSubscriptionCallback = (\n notification: SignatureStatusNotification | SignatureReceivedNotification,\n context: Context,\n) => void;\n\n/**\n * Signature subscription options\n */\nexport type SignatureSubscriptionOptions = {\n commitment?: Commitment;\n enableReceivedNotification?: boolean;\n};\n\n/**\n * Callback function for root change notifications\n */\nexport type RootChangeCallback = (root: number) => void;\n\n/**\n * @internal\n */\nconst LogsResult = pick({\n err: TransactionErrorResult,\n logs: array(string()),\n signature: string(),\n});\n\n/**\n * Logs result.\n */\nexport type Logs = {\n err: TransactionError | null;\n logs: string[];\n signature: string;\n};\n\n/**\n * Expected JSON RPC response for the \"logsNotification\" message.\n */\nconst LogsNotificationResult = pick({\n result: notificationResultAndContext(LogsResult),\n subscription: number(),\n});\n\n/**\n * Filter for log subscriptions.\n */\nexport type LogsFilter = PublicKey | 'all' | 'allWithVotes';\n\n/**\n * Callback function for log notifications.\n */\nexport type LogsCallback = (logs: Logs, ctx: Context) => void;\n\n/**\n * Signature result\n */\nexport type SignatureResult = {\n err: TransactionError | null;\n};\n\n/**\n * Transaction error\n */\nexport type TransactionError = {} | string;\n\n/**\n * Transaction confirmation status\n *
\n *   'processed': Transaction landed in a block which has reached 1 confirmation by the connected node\n *   'confirmed': Transaction landed in a block which has reached 1 confirmation by the cluster\n *   'finalized': Transaction landed in a block which has been finalized by the cluster\n * 
\n */\nexport type TransactionConfirmationStatus =\n | 'processed'\n | 'confirmed'\n | 'finalized';\n\n/**\n * Signature status\n */\nexport type SignatureStatus = {\n /** when the transaction was processed */\n slot: number;\n /** the number of blocks that have been confirmed and voted on in the fork containing `slot` */\n confirmations: number | null;\n /** transaction error, if any */\n err: TransactionError | null;\n /** cluster confirmation status, if data available. Possible responses: `processed`, `confirmed`, `finalized` */\n confirmationStatus?: TransactionConfirmationStatus;\n};\n\n/**\n * A confirmed signature with its status\n */\nexport type ConfirmedSignatureInfo = {\n /** the transaction signature */\n signature: string;\n /** when the transaction was processed */\n slot: number;\n /** error, if any */\n err: TransactionError | null;\n /** memo associated with the transaction, if any */\n memo: string | null;\n /** The unix timestamp of when the transaction was processed */\n blockTime?: number | null;\n /** Cluster confirmation status, if available. Possible values: `processed`, `confirmed`, `finalized` */\n confirmationStatus?: TransactionConfirmationStatus;\n};\n\n/**\n * An object defining headers to be passed to the RPC server\n */\nexport type HttpHeaders = {\n [header: string]: string;\n} & {\n // Prohibited headers; for internal use only.\n 'solana-client'?: never;\n};\n\n/**\n * The type of the JavaScript `fetch()` API\n */\nexport type FetchFn = typeof fetchImpl;\n\n/**\n * A callback used to augment the outgoing HTTP request\n */\nexport type FetchMiddleware = (\n info: Parameters[0],\n init: Parameters[1],\n fetch: (...a: Parameters) => void,\n) => void;\n\n/**\n * Configuration for instantiating a Connection\n */\nexport type ConnectionConfig = {\n /**\n * An `http.Agent` that will be used to manage socket connections (eg. to implement connection\n * persistence). Set this to `false` to create a connection that uses no agent. This applies to\n * Node environments only.\n */\n httpAgent?: NodeHttpAgent | NodeHttpsAgent | false;\n /** Optional commitment level */\n commitment?: Commitment;\n /** Optional endpoint URL to the fullnode JSON RPC PubSub WebSocket Endpoint */\n wsEndpoint?: string;\n /** Optional HTTP headers object */\n httpHeaders?: HttpHeaders;\n /** Optional custom fetch function */\n fetch?: FetchFn;\n /** Optional fetch middleware callback */\n fetchMiddleware?: FetchMiddleware;\n /** Optional Disable retrying calls when server responds with HTTP 429 (Too Many Requests) */\n disableRetryOnRateLimit?: boolean;\n /** time to allow for the server to initially process a transaction (in milliseconds) */\n confirmTransactionInitialTimeout?: number;\n};\n\n/** @internal */\nconst COMMON_HTTP_HEADERS = {\n 'solana-client': `js/${process.env.npm_package_version ?? 'UNKNOWN'}`,\n};\n\n/**\n * A connection to a fullnode JSON RPC endpoint\n */\nexport class Connection {\n /** @internal */ _commitment?: Commitment;\n /** @internal */ _confirmTransactionInitialTimeout?: number;\n /** @internal */ _rpcEndpoint: string;\n /** @internal */ _rpcWsEndpoint: string;\n /** @internal */ _rpcClient: RpcClient;\n /** @internal */ _rpcRequest: RpcRequest;\n /** @internal */ _rpcBatchRequest: RpcBatchRequest;\n /** @internal */ _rpcWebSocket: RpcWebSocketClient;\n /** @internal */ _rpcWebSocketConnected: boolean = false;\n /** @internal */ _rpcWebSocketHeartbeat: ReturnType<\n typeof setInterval\n > | null = null;\n /** @internal */ _rpcWebSocketIdleTimeout: ReturnType<\n typeof setTimeout\n > | null = null;\n /** @internal\n * A number that we increment every time an active connection closes.\n * Used to determine whether the same socket connection that was open\n * when an async operation started is the same one that's active when\n * its continuation fires.\n *\n */ private _rpcWebSocketGeneration: number = 0;\n\n /** @internal */ _disableBlockhashCaching: boolean = false;\n /** @internal */ _pollingBlockhash: boolean = false;\n /** @internal */ _blockhashInfo: {\n latestBlockhash: BlockhashWithExpiryBlockHeight | null;\n lastFetch: number;\n simulatedSignatures: Array;\n transactionSignatures: Array;\n } = {\n latestBlockhash: null,\n lastFetch: 0,\n transactionSignatures: [],\n simulatedSignatures: [],\n };\n\n /** @internal */ private _nextClientSubscriptionId: ClientSubscriptionId = 0;\n /** @internal */ private _subscriptionDisposeFunctionsByClientSubscriptionId: {\n [clientSubscriptionId: ClientSubscriptionId]:\n | SubscriptionDisposeFn\n | undefined;\n } = {};\n /** @internal */ private _subscriptionHashByClientSubscriptionId: {\n [clientSubscriptionId: ClientSubscriptionId]:\n | SubscriptionConfigHash\n | undefined;\n } = {};\n /** @internal */ private _subscriptionStateChangeCallbacksByHash: {\n [hash: SubscriptionConfigHash]:\n | Set\n | undefined;\n } = {};\n /** @internal */ private _subscriptionCallbacksByServerSubscriptionId: {\n [serverSubscriptionId: ServerSubscriptionId]:\n | Set\n | undefined;\n } = {};\n /** @internal */ private _subscriptionsByHash: {\n [hash: SubscriptionConfigHash]: Subscription | undefined;\n } = {};\n /**\n * Special case.\n * After a signature is processed, RPCs automatically dispose of the\n * subscription on the server side. We need to track which of these\n * subscriptions have been disposed in such a way, so that we know\n * whether the client is dealing with a not-yet-processed signature\n * (in which case we must tear down the server subscription) or an\n * already-processed signature (in which case the client can simply\n * clear out the subscription locally without telling the server).\n *\n * NOTE: There is a proposal to eliminate this special case, here:\n * https://github.com/solana-labs/solana/issues/18892\n */\n /** @internal */ private _subscriptionsAutoDisposedByRpc: Set =\n new Set();\n\n /**\n * Establish a JSON RPC connection\n *\n * @param endpoint URL to the fullnode JSON RPC endpoint\n * @param commitmentOrConfig optional default commitment level or optional ConnectionConfig configuration object\n */\n constructor(\n endpoint: string,\n commitmentOrConfig?: Commitment | ConnectionConfig,\n ) {\n let wsEndpoint;\n let httpHeaders;\n let fetch;\n let fetchMiddleware;\n let disableRetryOnRateLimit;\n let httpAgent;\n if (commitmentOrConfig && typeof commitmentOrConfig === 'string') {\n this._commitment = commitmentOrConfig;\n } else if (commitmentOrConfig) {\n this._commitment = commitmentOrConfig.commitment;\n this._confirmTransactionInitialTimeout =\n commitmentOrConfig.confirmTransactionInitialTimeout;\n wsEndpoint = commitmentOrConfig.wsEndpoint;\n httpHeaders = commitmentOrConfig.httpHeaders;\n fetch = commitmentOrConfig.fetch;\n fetchMiddleware = commitmentOrConfig.fetchMiddleware;\n disableRetryOnRateLimit = commitmentOrConfig.disableRetryOnRateLimit;\n httpAgent = commitmentOrConfig.httpAgent;\n }\n\n this._rpcEndpoint = assertEndpointUrl(endpoint);\n this._rpcWsEndpoint = wsEndpoint || makeWebsocketUrl(endpoint);\n\n this._rpcClient = createRpcClient(\n endpoint,\n httpHeaders,\n fetch,\n fetchMiddleware,\n disableRetryOnRateLimit,\n httpAgent,\n );\n this._rpcRequest = createRpcRequest(this._rpcClient);\n this._rpcBatchRequest = createRpcBatchRequest(this._rpcClient);\n\n this._rpcWebSocket = new RpcWebSocketClient(this._rpcWsEndpoint, {\n autoconnect: false,\n max_reconnects: Infinity,\n });\n this._rpcWebSocket.on('open', this._wsOnOpen.bind(this));\n this._rpcWebSocket.on('error', this._wsOnError.bind(this));\n this._rpcWebSocket.on('close', this._wsOnClose.bind(this));\n this._rpcWebSocket.on(\n 'accountNotification',\n this._wsOnAccountNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'programNotification',\n this._wsOnProgramAccountNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'slotNotification',\n this._wsOnSlotNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'slotsUpdatesNotification',\n this._wsOnSlotUpdatesNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'signatureNotification',\n this._wsOnSignatureNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'rootNotification',\n this._wsOnRootNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'logsNotification',\n this._wsOnLogsNotification.bind(this),\n );\n }\n\n /**\n * The default commitment used for requests\n */\n get commitment(): Commitment | undefined {\n return this._commitment;\n }\n\n /**\n * The RPC endpoint\n */\n get rpcEndpoint(): string {\n return this._rpcEndpoint;\n }\n\n /**\n * Fetch the balance for the specified public key, return with context\n */\n async getBalanceAndContext(\n publicKey: PublicKey,\n commitmentOrConfig?: Commitment | GetBalanceConfig,\n ): Promise> {\n /** @internal */\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [publicKey.toBase58()],\n commitment,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('getBalance', args);\n const res = create(unsafeRes, jsonRpcResultAndContext(number()));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get balance for ${publicKey.toBase58()}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch the balance for the specified public key\n */\n async getBalance(\n publicKey: PublicKey,\n commitmentOrConfig?: Commitment | GetBalanceConfig,\n ): Promise {\n return await this.getBalanceAndContext(publicKey, commitmentOrConfig)\n .then(x => x.value)\n .catch(e => {\n throw new Error(\n 'failed to get balance of account ' + publicKey.toBase58() + ': ' + e,\n );\n });\n }\n\n /**\n * Fetch the estimated production time of a block\n */\n async getBlockTime(slot: number): Promise {\n const unsafeRes = await this._rpcRequest('getBlockTime', [slot]);\n const res = create(unsafeRes, jsonRpcResult(nullable(number())));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get block time for slot ${slot}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch the lowest slot that the node has information about in its ledger.\n * This value may increase over time if the node is configured to purge older ledger data\n */\n async getMinimumLedgerSlot(): Promise {\n const unsafeRes = await this._rpcRequest('minimumLedgerSlot', []);\n const res = create(unsafeRes, jsonRpcResult(number()));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get minimum ledger slot',\n );\n }\n return res.result;\n }\n\n /**\n * Fetch the slot of the lowest confirmed block that has not been purged from the ledger\n */\n async getFirstAvailableBlock(): Promise {\n const unsafeRes = await this._rpcRequest('getFirstAvailableBlock', []);\n const res = create(unsafeRes, SlotRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get first available block',\n );\n }\n return res.result;\n }\n\n /**\n * Fetch information about the current supply\n */\n async getSupply(\n config?: GetSupplyConfig | Commitment,\n ): Promise> {\n let configArg: GetSupplyConfig = {};\n if (typeof config === 'string') {\n configArg = {commitment: config};\n } else if (config) {\n configArg = {\n ...config,\n commitment: (config && config.commitment) || this.commitment,\n };\n } else {\n configArg = {\n commitment: this.commitment,\n };\n }\n\n const unsafeRes = await this._rpcRequest('getSupply', [configArg]);\n const res = create(unsafeRes, GetSupplyRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get supply');\n }\n return res.result;\n }\n\n /**\n * Fetch the current supply of a token mint\n */\n async getTokenSupply(\n tokenMintAddress: PublicKey,\n commitment?: Commitment,\n ): Promise> {\n const args = this._buildArgs([tokenMintAddress.toBase58()], commitment);\n const unsafeRes = await this._rpcRequest('getTokenSupply', args);\n const res = create(unsafeRes, jsonRpcResultAndContext(TokenAmountResult));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get token supply');\n }\n return res.result;\n }\n\n /**\n * Fetch the current balance of a token account\n */\n async getTokenAccountBalance(\n tokenAddress: PublicKey,\n commitment?: Commitment,\n ): Promise> {\n const args = this._buildArgs([tokenAddress.toBase58()], commitment);\n const unsafeRes = await this._rpcRequest('getTokenAccountBalance', args);\n const res = create(unsafeRes, jsonRpcResultAndContext(TokenAmountResult));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get token account balance',\n );\n }\n return res.result;\n }\n\n /**\n * Fetch all the token accounts owned by the specified account\n *\n * @return {Promise}\n */\n async getTokenAccountsByOwner(\n ownerAddress: PublicKey,\n filter: TokenAccountsFilter,\n commitmentOrConfig?: Commitment | GetTokenAccountsByOwnerConfig,\n ): Promise> {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n let _args: any[] = [ownerAddress.toBase58()];\n if ('mint' in filter) {\n _args.push({mint: filter.mint.toBase58()});\n } else {\n _args.push({programId: filter.programId.toBase58()});\n }\n\n const args = this._buildArgs(_args, commitment, 'base64', config);\n const unsafeRes = await this._rpcRequest('getTokenAccountsByOwner', args);\n const res = create(unsafeRes, GetTokenAccountsByOwner);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get token accounts owned by account ${ownerAddress.toBase58()}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch parsed token accounts owned by the specified account\n *\n * @return {Promise}>>>}\n */\n async getParsedTokenAccountsByOwner(\n ownerAddress: PublicKey,\n filter: TokenAccountsFilter,\n commitment?: Commitment,\n ): Promise<\n RpcResponseAndContext<\n Array<{pubkey: PublicKey; account: AccountInfo}>\n >\n > {\n let _args: any[] = [ownerAddress.toBase58()];\n if ('mint' in filter) {\n _args.push({mint: filter.mint.toBase58()});\n } else {\n _args.push({programId: filter.programId.toBase58()});\n }\n\n const args = this._buildArgs(_args, commitment, 'jsonParsed');\n const unsafeRes = await this._rpcRequest('getTokenAccountsByOwner', args);\n const res = create(unsafeRes, GetParsedTokenAccountsByOwner);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get token accounts owned by account ${ownerAddress.toBase58()}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch the 20 largest accounts with their current balances\n */\n async getLargestAccounts(\n config?: GetLargestAccountsConfig,\n ): Promise>> {\n const arg = {\n ...config,\n commitment: (config && config.commitment) || this.commitment,\n };\n const args = arg.filter || arg.commitment ? [arg] : [];\n const unsafeRes = await this._rpcRequest('getLargestAccounts', args);\n const res = create(unsafeRes, GetLargestAccountsRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get largest accounts');\n }\n return res.result;\n }\n\n /**\n * Fetch the 20 largest token accounts with their current balances\n * for a given mint.\n */\n async getTokenLargestAccounts(\n mintAddress: PublicKey,\n commitment?: Commitment,\n ): Promise>> {\n const args = this._buildArgs([mintAddress.toBase58()], commitment);\n const unsafeRes = await this._rpcRequest('getTokenLargestAccounts', args);\n const res = create(unsafeRes, GetTokenLargestAccountsResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get token largest accounts',\n );\n }\n return res.result;\n }\n\n /**\n * Fetch all the account info for the specified public key, return with context\n */\n async getAccountInfoAndContext(\n publicKey: PublicKey,\n commitmentOrConfig?: Commitment | GetAccountInfoConfig,\n ): Promise | null>> {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [publicKey.toBase58()],\n commitment,\n 'base64',\n config,\n );\n const unsafeRes = await this._rpcRequest('getAccountInfo', args);\n const res = create(\n unsafeRes,\n jsonRpcResultAndContext(nullable(AccountInfoResult)),\n );\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get info about account ${publicKey.toBase58()}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch parsed account info for the specified public key\n */\n async getParsedAccountInfo(\n publicKey: PublicKey,\n commitmentOrConfig?: Commitment | GetAccountInfoConfig,\n ): Promise<\n RpcResponseAndContext | null>\n > {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [publicKey.toBase58()],\n commitment,\n 'jsonParsed',\n config,\n );\n const unsafeRes = await this._rpcRequest('getAccountInfo', args);\n const res = create(\n unsafeRes,\n jsonRpcResultAndContext(nullable(ParsedAccountInfoResult)),\n );\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get info about account ${publicKey.toBase58()}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch all the account info for the specified public key\n */\n async getAccountInfo(\n publicKey: PublicKey,\n commitmentOrConfig?: Commitment | GetAccountInfoConfig,\n ): Promise | null> {\n try {\n const res = await this.getAccountInfoAndContext(\n publicKey,\n commitmentOrConfig,\n );\n return res.value;\n } catch (e) {\n throw new Error(\n 'failed to get info about account ' + publicKey.toBase58() + ': ' + e,\n );\n }\n }\n\n /**\n * Fetch all the account info for multiple accounts specified by an array of public keys, return with context\n */\n async getMultipleParsedAccounts(\n publicKeys: PublicKey[],\n rawConfig?: GetMultipleAccountsConfig,\n ): Promise<\n RpcResponseAndContext<(AccountInfo | null)[]>\n > {\n const {commitment, config} = extractCommitmentFromConfig(rawConfig);\n const keys = publicKeys.map(key => key.toBase58());\n const args = this._buildArgs([keys], commitment, 'jsonParsed', config);\n const unsafeRes = await this._rpcRequest('getMultipleAccounts', args);\n const res = create(\n unsafeRes,\n jsonRpcResultAndContext(array(nullable(ParsedAccountInfoResult))),\n );\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get info for accounts ${keys}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch all the account info for multiple accounts specified by an array of public keys, return with context\n */\n async getMultipleAccountsInfoAndContext(\n publicKeys: PublicKey[],\n commitmentOrConfig?: Commitment | GetMultipleAccountsConfig,\n ): Promise | null)[]>> {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const keys = publicKeys.map(key => key.toBase58());\n const args = this._buildArgs([keys], commitment, 'base64', config);\n const unsafeRes = await this._rpcRequest('getMultipleAccounts', args);\n const res = create(\n unsafeRes,\n jsonRpcResultAndContext(array(nullable(AccountInfoResult))),\n );\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get info for accounts ${keys}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch all the account info for multiple accounts specified by an array of public keys\n */\n async getMultipleAccountsInfo(\n publicKeys: PublicKey[],\n commitmentOrConfig?: Commitment | GetMultipleAccountsConfig,\n ): Promise<(AccountInfo | null)[]> {\n const res = await this.getMultipleAccountsInfoAndContext(\n publicKeys,\n commitmentOrConfig,\n );\n return res.value;\n }\n\n /**\n * Returns epoch activation information for a stake account that has been delegated\n *\n * @deprecated Deprecated since RPC v1.18; will be removed in a future version.\n */\n async getStakeActivation(\n publicKey: PublicKey,\n commitmentOrConfig?: Commitment | GetStakeActivationConfig,\n epoch?: number,\n ): Promise {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [publicKey.toBase58()],\n commitment,\n undefined /* encoding */,\n {\n ...config,\n epoch: epoch != null ? epoch : config?.epoch,\n },\n );\n\n const unsafeRes = await this._rpcRequest('getStakeActivation', args);\n const res = create(unsafeRes, jsonRpcResult(StakeActivationResult));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get Stake Activation ${publicKey.toBase58()}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch all the accounts owned by the specified program id\n *\n * @return {Promise}>>}\n */\n async getProgramAccounts(\n programId: PublicKey,\n configOrCommitment: GetProgramAccountsConfig &\n Readonly<{withContext: true}>,\n ): Promise>;\n // eslint-disable-next-line no-dupe-class-members\n async getProgramAccounts(\n programId: PublicKey,\n configOrCommitment?: GetProgramAccountsConfig | Commitment,\n ): Promise;\n // eslint-disable-next-line no-dupe-class-members\n async getProgramAccounts(\n programId: PublicKey,\n configOrCommitment?: GetProgramAccountsConfig | Commitment,\n ): Promise<\n | GetProgramAccountsResponse\n | RpcResponseAndContext\n > {\n const {commitment, config} =\n extractCommitmentFromConfig(configOrCommitment);\n const {encoding, ...configWithoutEncoding} = config || {};\n const args = this._buildArgs(\n [programId.toBase58()],\n commitment,\n encoding || 'base64',\n {\n ...configWithoutEncoding,\n ...(configWithoutEncoding.filters\n ? {\n filters: applyDefaultMemcmpEncodingToFilters(\n configWithoutEncoding.filters,\n ),\n }\n : null),\n },\n );\n const unsafeRes = await this._rpcRequest('getProgramAccounts', args);\n const baseSchema = array(KeyedAccountInfoResult);\n const res =\n configWithoutEncoding.withContext === true\n ? create(unsafeRes, jsonRpcResultAndContext(baseSchema))\n : create(unsafeRes, jsonRpcResult(baseSchema));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get accounts owned by program ${programId.toBase58()}`,\n );\n }\n return res.result;\n }\n\n /**\n * Fetch and parse all the accounts owned by the specified program id\n *\n * @return {Promise}>>}\n */\n async getParsedProgramAccounts(\n programId: PublicKey,\n configOrCommitment?: GetParsedProgramAccountsConfig | Commitment,\n ): Promise<\n Array<{\n pubkey: PublicKey;\n account: AccountInfo;\n }>\n > {\n const {commitment, config} =\n extractCommitmentFromConfig(configOrCommitment);\n const args = this._buildArgs(\n [programId.toBase58()],\n commitment,\n 'jsonParsed',\n config,\n );\n const unsafeRes = await this._rpcRequest('getProgramAccounts', args);\n const res = create(\n unsafeRes,\n jsonRpcResult(array(KeyedParsedAccountInfoResult)),\n );\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get accounts owned by program ${programId.toBase58()}`,\n );\n }\n return res.result;\n }\n\n confirmTransaction(\n strategy: TransactionConfirmationStrategy,\n commitment?: Commitment,\n ): Promise>;\n\n /** @deprecated Instead, call `confirmTransaction` and pass in {@link TransactionConfirmationStrategy} */\n // eslint-disable-next-line no-dupe-class-members\n confirmTransaction(\n strategy: TransactionSignature,\n commitment?: Commitment,\n ): Promise>;\n\n // eslint-disable-next-line no-dupe-class-members\n async confirmTransaction(\n strategy: TransactionConfirmationStrategy | TransactionSignature,\n commitment?: Commitment,\n ): Promise> {\n let rawSignature: string;\n\n if (typeof strategy == 'string') {\n rawSignature = strategy;\n } else {\n const config = strategy as TransactionConfirmationStrategy;\n\n if (config.abortSignal?.aborted) {\n return Promise.reject(config.abortSignal.reason);\n }\n rawSignature = config.signature;\n }\n\n let decodedSignature;\n\n try {\n decodedSignature = bs58.decode(rawSignature);\n } catch (err) {\n throw new Error('signature must be base58 encoded: ' + rawSignature);\n }\n\n assert(decodedSignature.length === 64, 'signature has invalid length');\n\n if (typeof strategy === 'string') {\n return await this.confirmTransactionUsingLegacyTimeoutStrategy({\n commitment: commitment || this.commitment,\n signature: rawSignature,\n });\n } else if ('lastValidBlockHeight' in strategy) {\n return await this.confirmTransactionUsingBlockHeightExceedanceStrategy({\n commitment: commitment || this.commitment,\n strategy,\n });\n } else {\n return await this.confirmTransactionUsingDurableNonceStrategy({\n commitment: commitment || this.commitment,\n strategy,\n });\n }\n }\n\n private getCancellationPromise(signal?: AbortSignal): Promise {\n return new Promise((_, reject) => {\n if (signal == null) {\n return;\n }\n if (signal.aborted) {\n reject(signal.reason);\n } else {\n signal.addEventListener('abort', () => {\n reject(signal.reason);\n });\n }\n });\n }\n\n private getTransactionConfirmationPromise({\n commitment,\n signature,\n }: {\n commitment?: Commitment;\n signature: string;\n }): {\n abortConfirmation(): void;\n confirmationPromise: Promise<{\n __type: TransactionStatus.PROCESSED;\n response: RpcResponseAndContext;\n }>;\n } {\n let signatureSubscriptionId: number | undefined;\n let disposeSignatureSubscriptionStateChangeObserver:\n | SubscriptionStateChangeDisposeFn\n | undefined;\n let done = false;\n const confirmationPromise = new Promise<{\n __type: TransactionStatus.PROCESSED;\n response: RpcResponseAndContext;\n }>((resolve, reject) => {\n try {\n signatureSubscriptionId = this.onSignature(\n signature,\n (result: SignatureResult, context: Context) => {\n signatureSubscriptionId = undefined;\n const response = {\n context,\n value: result,\n };\n resolve({__type: TransactionStatus.PROCESSED, response});\n },\n commitment,\n );\n const subscriptionSetupPromise = new Promise(\n resolveSubscriptionSetup => {\n if (signatureSubscriptionId == null) {\n resolveSubscriptionSetup();\n } else {\n disposeSignatureSubscriptionStateChangeObserver =\n this._onSubscriptionStateChange(\n signatureSubscriptionId,\n nextState => {\n if (nextState === 'subscribed') {\n resolveSubscriptionSetup();\n }\n },\n );\n }\n },\n );\n (async () => {\n await subscriptionSetupPromise;\n if (done) return;\n const response = await this.getSignatureStatus(signature);\n if (done) return;\n if (response == null) {\n return;\n }\n const {context, value} = response;\n if (value == null) {\n return;\n }\n if (value?.err) {\n reject(value.err);\n } else {\n switch (commitment) {\n case 'confirmed':\n case 'single':\n case 'singleGossip': {\n if (value.confirmationStatus === 'processed') {\n return;\n }\n break;\n }\n case 'finalized':\n case 'max':\n case 'root': {\n if (\n value.confirmationStatus === 'processed' ||\n value.confirmationStatus === 'confirmed'\n ) {\n return;\n }\n break;\n }\n // exhaust enums to ensure full coverage\n case 'processed':\n case 'recent':\n }\n done = true;\n resolve({\n __type: TransactionStatus.PROCESSED,\n response: {\n context,\n value,\n },\n });\n }\n })();\n } catch (err) {\n reject(err);\n }\n });\n const abortConfirmation = () => {\n if (disposeSignatureSubscriptionStateChangeObserver) {\n disposeSignatureSubscriptionStateChangeObserver();\n disposeSignatureSubscriptionStateChangeObserver = undefined;\n }\n if (signatureSubscriptionId != null) {\n this.removeSignatureListener(signatureSubscriptionId);\n signatureSubscriptionId = undefined;\n }\n };\n return {abortConfirmation, confirmationPromise};\n }\n\n private async confirmTransactionUsingBlockHeightExceedanceStrategy({\n commitment,\n strategy: {abortSignal, lastValidBlockHeight, signature},\n }: {\n commitment?: Commitment;\n strategy: BlockheightBasedTransactionConfirmationStrategy;\n }) {\n let done: boolean = false;\n const expiryPromise = new Promise<{\n __type: TransactionStatus.BLOCKHEIGHT_EXCEEDED;\n }>(resolve => {\n const checkBlockHeight = async () => {\n try {\n const blockHeight = await this.getBlockHeight(commitment);\n return blockHeight;\n } catch (_e) {\n return -1;\n }\n };\n (async () => {\n let currentBlockHeight = await checkBlockHeight();\n if (done) return;\n while (currentBlockHeight <= lastValidBlockHeight) {\n await sleep(1000);\n if (done) return;\n currentBlockHeight = await checkBlockHeight();\n if (done) return;\n }\n resolve({__type: TransactionStatus.BLOCKHEIGHT_EXCEEDED});\n })();\n });\n const {abortConfirmation, confirmationPromise} =\n this.getTransactionConfirmationPromise({commitment, signature});\n const cancellationPromise = this.getCancellationPromise(abortSignal);\n let result: RpcResponseAndContext;\n try {\n const outcome = await Promise.race([\n cancellationPromise,\n confirmationPromise,\n expiryPromise,\n ]);\n if (outcome.__type === TransactionStatus.PROCESSED) {\n result = outcome.response;\n } else {\n throw new TransactionExpiredBlockheightExceededError(signature);\n }\n } finally {\n done = true;\n abortConfirmation();\n }\n return result;\n }\n\n private async confirmTransactionUsingDurableNonceStrategy({\n commitment,\n strategy: {\n abortSignal,\n minContextSlot,\n nonceAccountPubkey,\n nonceValue,\n signature,\n },\n }: {\n commitment?: Commitment;\n strategy: DurableNonceTransactionConfirmationStrategy;\n }) {\n let done: boolean = false;\n const expiryPromise = new Promise<{\n __type: TransactionStatus.NONCE_INVALID;\n slotInWhichNonceDidAdvance: number | null;\n }>(resolve => {\n let currentNonceValue: string | undefined = nonceValue;\n let lastCheckedSlot: number | null = null;\n const getCurrentNonceValue = async () => {\n try {\n const {context, value: nonceAccount} = await this.getNonceAndContext(\n nonceAccountPubkey,\n {\n commitment,\n minContextSlot,\n },\n );\n lastCheckedSlot = context.slot;\n return nonceAccount?.nonce;\n } catch (e) {\n // If for whatever reason we can't reach/read the nonce\n // account, just keep using the last-known value.\n return currentNonceValue;\n }\n };\n (async () => {\n currentNonceValue = await getCurrentNonceValue();\n if (done) return;\n while (\n true // eslint-disable-line no-constant-condition\n ) {\n if (nonceValue !== currentNonceValue) {\n resolve({\n __type: TransactionStatus.NONCE_INVALID,\n slotInWhichNonceDidAdvance: lastCheckedSlot,\n });\n return;\n }\n await sleep(2000);\n if (done) return;\n currentNonceValue = await getCurrentNonceValue();\n if (done) return;\n }\n })();\n });\n const {abortConfirmation, confirmationPromise} =\n this.getTransactionConfirmationPromise({commitment, signature});\n const cancellationPromise = this.getCancellationPromise(abortSignal);\n let result: RpcResponseAndContext;\n try {\n const outcome = await Promise.race([\n cancellationPromise,\n confirmationPromise,\n expiryPromise,\n ]);\n if (outcome.__type === TransactionStatus.PROCESSED) {\n result = outcome.response;\n } else {\n // Double check that the transaction is indeed unconfirmed.\n let signatureStatus:\n | RpcResponseAndContext\n | null\n | undefined;\n while (\n true // eslint-disable-line no-constant-condition\n ) {\n const status = await this.getSignatureStatus(signature);\n if (status == null) {\n break;\n }\n if (\n status.context.slot <\n (outcome.slotInWhichNonceDidAdvance ?? minContextSlot)\n ) {\n await sleep(400);\n continue;\n }\n signatureStatus = status;\n break;\n }\n if (signatureStatus?.value) {\n const commitmentForStatus = commitment || 'finalized';\n const {confirmationStatus} = signatureStatus.value;\n switch (commitmentForStatus) {\n case 'processed':\n case 'recent':\n if (\n confirmationStatus !== 'processed' &&\n confirmationStatus !== 'confirmed' &&\n confirmationStatus !== 'finalized'\n ) {\n throw new TransactionExpiredNonceInvalidError(signature);\n }\n break;\n case 'confirmed':\n case 'single':\n case 'singleGossip':\n if (\n confirmationStatus !== 'confirmed' &&\n confirmationStatus !== 'finalized'\n ) {\n throw new TransactionExpiredNonceInvalidError(signature);\n }\n break;\n case 'finalized':\n case 'max':\n case 'root':\n if (confirmationStatus !== 'finalized') {\n throw new TransactionExpiredNonceInvalidError(signature);\n }\n break;\n default:\n // Exhaustive switch.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ((_: never) => {})(commitmentForStatus);\n }\n result = {\n context: signatureStatus.context,\n value: {err: signatureStatus.value.err},\n };\n } else {\n throw new TransactionExpiredNonceInvalidError(signature);\n }\n }\n } finally {\n done = true;\n abortConfirmation();\n }\n return result;\n }\n\n private async confirmTransactionUsingLegacyTimeoutStrategy({\n commitment,\n signature,\n }: {\n commitment?: Commitment;\n signature: string;\n }) {\n let timeoutId;\n const expiryPromise = new Promise<{\n __type: TransactionStatus.TIMED_OUT;\n timeoutMs: number;\n }>(resolve => {\n let timeoutMs = this._confirmTransactionInitialTimeout || 60 * 1000;\n switch (commitment) {\n case 'processed':\n case 'recent':\n case 'single':\n case 'confirmed':\n case 'singleGossip': {\n timeoutMs = this._confirmTransactionInitialTimeout || 30 * 1000;\n break;\n }\n // exhaust enums to ensure full coverage\n case 'finalized':\n case 'max':\n case 'root':\n }\n timeoutId = setTimeout(\n () => resolve({__type: TransactionStatus.TIMED_OUT, timeoutMs}),\n timeoutMs,\n );\n });\n const {abortConfirmation, confirmationPromise} =\n this.getTransactionConfirmationPromise({\n commitment,\n signature,\n });\n let result: RpcResponseAndContext;\n try {\n const outcome = await Promise.race([confirmationPromise, expiryPromise]);\n if (outcome.__type === TransactionStatus.PROCESSED) {\n result = outcome.response;\n } else {\n throw new TransactionExpiredTimeoutError(\n signature,\n outcome.timeoutMs / 1000,\n );\n }\n } finally {\n clearTimeout(timeoutId);\n abortConfirmation();\n }\n return result;\n }\n\n /**\n * Return the list of nodes that are currently participating in the cluster\n */\n async getClusterNodes(): Promise> {\n const unsafeRes = await this._rpcRequest('getClusterNodes', []);\n const res = create(unsafeRes, jsonRpcResult(array(ContactInfoResult)));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get cluster nodes');\n }\n return res.result;\n }\n\n /**\n * Return the list of nodes that are currently participating in the cluster\n */\n async getVoteAccounts(commitment?: Commitment): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getVoteAccounts', args);\n const res = create(unsafeRes, GetVoteAccounts);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get vote accounts');\n }\n return res.result;\n }\n\n /**\n * Fetch the current slot that the node is processing\n */\n async getSlot(\n commitmentOrConfig?: Commitment | GetSlotConfig,\n ): Promise {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [],\n commitment,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('getSlot', args);\n const res = create(unsafeRes, jsonRpcResult(number()));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get slot');\n }\n return res.result;\n }\n\n /**\n * Fetch the current slot leader of the cluster\n */\n async getSlotLeader(\n commitmentOrConfig?: Commitment | GetSlotLeaderConfig,\n ): Promise {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [],\n commitment,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('getSlotLeader', args);\n const res = create(unsafeRes, jsonRpcResult(string()));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get slot leader');\n }\n return res.result;\n }\n\n /**\n * Fetch `limit` number of slot leaders starting from `startSlot`\n *\n * @param startSlot fetch slot leaders starting from this slot\n * @param limit number of slot leaders to return\n */\n async getSlotLeaders(\n startSlot: number,\n limit: number,\n ): Promise> {\n const args = [startSlot, limit];\n const unsafeRes = await this._rpcRequest('getSlotLeaders', args);\n const res = create(unsafeRes, jsonRpcResult(array(PublicKeyFromString)));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get slot leaders');\n }\n return res.result;\n }\n\n /**\n * Fetch the current status of a signature\n */\n async getSignatureStatus(\n signature: TransactionSignature,\n config?: SignatureStatusConfig,\n ): Promise> {\n const {context, value: values} = await this.getSignatureStatuses(\n [signature],\n config,\n );\n assert(values.length === 1);\n const value = values[0];\n return {context, value};\n }\n\n /**\n * Fetch the current statuses of a batch of signatures\n */\n async getSignatureStatuses(\n signatures: Array,\n config?: SignatureStatusConfig,\n ): Promise>> {\n const params: any[] = [signatures];\n if (config) {\n params.push(config);\n }\n const unsafeRes = await this._rpcRequest('getSignatureStatuses', params);\n const res = create(unsafeRes, GetSignatureStatusesRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get signature status');\n }\n return res.result;\n }\n\n /**\n * Fetch the current transaction count of the cluster\n */\n async getTransactionCount(\n commitmentOrConfig?: Commitment | GetTransactionCountConfig,\n ): Promise {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [],\n commitment,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('getTransactionCount', args);\n const res = create(unsafeRes, jsonRpcResult(number()));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get transaction count',\n );\n }\n return res.result;\n }\n\n /**\n * Fetch the current total currency supply of the cluster in lamports\n *\n * @deprecated Deprecated since RPC v1.2.8. Please use {@link getSupply} instead.\n */\n async getTotalSupply(commitment?: Commitment): Promise {\n const result = await this.getSupply({\n commitment,\n excludeNonCirculatingAccountsList: true,\n });\n return result.value.total;\n }\n\n /**\n * Fetch the cluster InflationGovernor parameters\n */\n async getInflationGovernor(\n commitment?: Commitment,\n ): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getInflationGovernor', args);\n const res = create(unsafeRes, GetInflationGovernorRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get inflation');\n }\n return res.result;\n }\n\n /**\n * Fetch the inflation reward for a list of addresses for an epoch\n */\n async getInflationReward(\n addresses: PublicKey[],\n epoch?: number,\n commitmentOrConfig?: Commitment | GetInflationRewardConfig,\n ): Promise<(InflationReward | null)[]> {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [addresses.map(pubkey => pubkey.toBase58())],\n commitment,\n undefined /* encoding */,\n {\n ...config,\n epoch: epoch != null ? epoch : config?.epoch,\n },\n );\n const unsafeRes = await this._rpcRequest('getInflationReward', args);\n const res = create(unsafeRes, GetInflationRewardResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get inflation reward');\n }\n return res.result;\n }\n\n /**\n * Fetch the specific inflation values for the current epoch\n */\n async getInflationRate(): Promise {\n const unsafeRes = await this._rpcRequest('getInflationRate', []);\n const res = create(unsafeRes, GetInflationRateRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get inflation rate');\n }\n return res.result;\n }\n\n /**\n * Fetch the Epoch Info parameters\n */\n async getEpochInfo(\n commitmentOrConfig?: Commitment | GetEpochInfoConfig,\n ): Promise {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [],\n commitment,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('getEpochInfo', args);\n const res = create(unsafeRes, GetEpochInfoRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get epoch info');\n }\n return res.result;\n }\n\n /**\n * Fetch the Epoch Schedule parameters\n */\n async getEpochSchedule(): Promise {\n const unsafeRes = await this._rpcRequest('getEpochSchedule', []);\n const res = create(unsafeRes, GetEpochScheduleRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get epoch schedule');\n }\n const epochSchedule = res.result;\n return new EpochSchedule(\n epochSchedule.slotsPerEpoch,\n epochSchedule.leaderScheduleSlotOffset,\n epochSchedule.warmup,\n epochSchedule.firstNormalEpoch,\n epochSchedule.firstNormalSlot,\n );\n }\n\n /**\n * Fetch the leader schedule for the current epoch\n * @return {Promise>}\n */\n async getLeaderSchedule(): Promise {\n const unsafeRes = await this._rpcRequest('getLeaderSchedule', []);\n const res = create(unsafeRes, GetLeaderScheduleRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get leader schedule');\n }\n return res.result;\n }\n\n /**\n * Fetch the minimum balance needed to exempt an account of `dataLength`\n * size from rent\n */\n async getMinimumBalanceForRentExemption(\n dataLength: number,\n commitment?: Commitment,\n ): Promise {\n const args = this._buildArgs([dataLength], commitment);\n const unsafeRes = await this._rpcRequest(\n 'getMinimumBalanceForRentExemption',\n args,\n );\n const res = create(unsafeRes, GetMinimumBalanceForRentExemptionRpcResult);\n if ('error' in res) {\n console.warn('Unable to fetch minimum balance for rent exemption');\n return 0;\n }\n return res.result;\n }\n\n /**\n * Fetch a recent blockhash from the cluster, return with context\n * @return {Promise>}\n *\n * @deprecated Deprecated since RPC v1.9.0. Please use {@link getLatestBlockhash} instead.\n */\n async getRecentBlockhashAndContext(commitment?: Commitment): Promise<\n RpcResponseAndContext<{\n blockhash: Blockhash;\n feeCalculator: FeeCalculator;\n }>\n > {\n const {\n context,\n value: {blockhash},\n } = await this.getLatestBlockhashAndContext(commitment);\n const feeCalculator = {\n get lamportsPerSignature(): number {\n throw new Error(\n 'The capability to fetch `lamportsPerSignature` using the `getRecentBlockhash` API is ' +\n 'no longer offered by the network. Use the `getFeeForMessage` API to obtain the fee ' +\n 'for a given message.',\n );\n },\n toJSON() {\n return {};\n },\n };\n return {\n context,\n value: {\n blockhash,\n feeCalculator,\n },\n };\n }\n\n /**\n * Fetch recent performance samples\n * @return {Promise>}\n */\n async getRecentPerformanceSamples(\n limit?: number,\n ): Promise> {\n const unsafeRes = await this._rpcRequest(\n 'getRecentPerformanceSamples',\n limit ? [limit] : [],\n );\n const res = create(unsafeRes, GetRecentPerformanceSamplesRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get recent performance samples',\n );\n }\n\n return res.result;\n }\n\n /**\n * Fetch the fee calculator for a recent blockhash from the cluster, return with context\n *\n * @deprecated Deprecated since RPC v1.9.0. Please use {@link getFeeForMessage} instead.\n */\n async getFeeCalculatorForBlockhash(\n blockhash: Blockhash,\n commitment?: Commitment,\n ): Promise> {\n const args = this._buildArgs([blockhash], commitment);\n const unsafeRes = await this._rpcRequest(\n 'getFeeCalculatorForBlockhash',\n args,\n );\n\n const res = create(unsafeRes, GetFeeCalculatorRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get fee calculator');\n }\n const {context, value} = res.result;\n return {\n context,\n value: value !== null ? value.feeCalculator : null,\n };\n }\n\n /**\n * Fetch the fee for a message from the cluster, return with context\n */\n async getFeeForMessage(\n message: VersionedMessage,\n commitment?: Commitment,\n ): Promise> {\n const wireMessage = toBuffer(message.serialize()).toString('base64');\n const args = this._buildArgs([wireMessage], commitment);\n const unsafeRes = await this._rpcRequest('getFeeForMessage', args);\n\n const res = create(unsafeRes, jsonRpcResultAndContext(nullable(number())));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get fee for message');\n }\n if (res.result === null) {\n throw new Error('invalid blockhash');\n }\n return res.result;\n }\n\n /**\n * Fetch a list of prioritization fees from recent blocks.\n */\n async getRecentPrioritizationFees(\n config?: GetRecentPrioritizationFeesConfig,\n ): Promise {\n const accounts = config?.lockedWritableAccounts?.map(key => key.toBase58());\n const args = accounts?.length ? [accounts] : [];\n const unsafeRes = await this._rpcRequest(\n 'getRecentPrioritizationFees',\n args,\n );\n const res = create(unsafeRes, GetRecentPrioritizationFeesRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get recent prioritization fees',\n );\n }\n return res.result;\n }\n /**\n * Fetch a recent blockhash from the cluster\n * @return {Promise<{blockhash: Blockhash, feeCalculator: FeeCalculator}>}\n *\n * @deprecated Deprecated since RPC v1.8.0. Please use {@link getLatestBlockhash} instead.\n */\n async getRecentBlockhash(\n commitment?: Commitment,\n ): Promise<{blockhash: Blockhash; feeCalculator: FeeCalculator}> {\n try {\n const res = await this.getRecentBlockhashAndContext(commitment);\n return res.value;\n } catch (e) {\n throw new Error('failed to get recent blockhash: ' + e);\n }\n }\n\n /**\n * Fetch the latest blockhash from the cluster\n * @return {Promise}\n */\n async getLatestBlockhash(\n commitmentOrConfig?: Commitment | GetLatestBlockhashConfig,\n ): Promise {\n try {\n const res = await this.getLatestBlockhashAndContext(commitmentOrConfig);\n return res.value;\n } catch (e) {\n throw new Error('failed to get recent blockhash: ' + e);\n }\n }\n\n /**\n * Fetch the latest blockhash from the cluster\n * @return {Promise}\n */\n async getLatestBlockhashAndContext(\n commitmentOrConfig?: Commitment | GetLatestBlockhashConfig,\n ): Promise> {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [],\n commitment,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('getLatestBlockhash', args);\n const res = create(unsafeRes, GetLatestBlockhashRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get latest blockhash');\n }\n return res.result;\n }\n\n /**\n * Returns whether a blockhash is still valid or not\n */\n async isBlockhashValid(\n blockhash: Blockhash,\n rawConfig?: IsBlockhashValidConfig,\n ): Promise> {\n const {commitment, config} = extractCommitmentFromConfig(rawConfig);\n const args = this._buildArgs(\n [blockhash],\n commitment,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('isBlockhashValid', args);\n const res = create(unsafeRes, IsBlockhashValidRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to determine if the blockhash `' + blockhash + '`is valid',\n );\n }\n return res.result;\n }\n\n /**\n * Fetch the node version\n */\n async getVersion(): Promise {\n const unsafeRes = await this._rpcRequest('getVersion', []);\n const res = create(unsafeRes, jsonRpcResult(VersionResult));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get version');\n }\n return res.result;\n }\n\n /**\n * Fetch the genesis hash\n */\n async getGenesisHash(): Promise {\n const unsafeRes = await this._rpcRequest('getGenesisHash', []);\n const res = create(unsafeRes, jsonRpcResult(string()));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get genesis hash');\n }\n return res.result;\n }\n\n /**\n * Fetch a processed block from the cluster.\n *\n * @deprecated Instead, call `getBlock` using a `GetVersionedBlockConfig` by\n * setting the `maxSupportedTransactionVersion` property.\n */\n async getBlock(\n slot: number,\n rawConfig?: GetBlockConfig,\n ): Promise;\n\n /**\n * @deprecated Instead, call `getBlock` using a `GetVersionedBlockConfig` by\n * setting the `maxSupportedTransactionVersion` property.\n */\n // eslint-disable-next-line no-dupe-class-members\n async getBlock(\n slot: number,\n rawConfig: GetBlockConfig & {transactionDetails: 'accounts'},\n ): Promise;\n\n /**\n * @deprecated Instead, call `getBlock` using a `GetVersionedBlockConfig` by\n * setting the `maxSupportedTransactionVersion` property.\n */\n // eslint-disable-next-line no-dupe-class-members\n async getBlock(\n slot: number,\n rawConfig: GetBlockConfig & {transactionDetails: 'none'},\n ): Promise;\n\n /**\n * Fetch a processed block from the cluster.\n */\n // eslint-disable-next-line no-dupe-class-members\n async getBlock(\n slot: number,\n rawConfig?: GetVersionedBlockConfig,\n ): Promise;\n\n // eslint-disable-next-line no-dupe-class-members\n async getBlock(\n slot: number,\n rawConfig: GetVersionedBlockConfig & {transactionDetails: 'accounts'},\n ): Promise;\n\n // eslint-disable-next-line no-dupe-class-members\n async getBlock(\n slot: number,\n rawConfig: GetVersionedBlockConfig & {transactionDetails: 'none'},\n ): Promise;\n\n /**\n * Fetch a processed block from the cluster.\n */\n // eslint-disable-next-line no-dupe-class-members\n async getBlock(\n slot: number,\n rawConfig?: GetVersionedBlockConfig,\n ): Promise<\n | VersionedBlockResponse\n | VersionedAccountsModeBlockResponse\n | VersionedNoneModeBlockResponse\n | null\n > {\n const {commitment, config} = extractCommitmentFromConfig(rawConfig);\n const args = this._buildArgsAtLeastConfirmed(\n [slot],\n commitment as Finality,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('getBlock', args);\n try {\n switch (config?.transactionDetails) {\n case 'accounts': {\n const res = create(unsafeRes, GetAccountsModeBlockRpcResult);\n if ('error' in res) {\n throw res.error;\n }\n return res.result;\n }\n case 'none': {\n const res = create(unsafeRes, GetNoneModeBlockRpcResult);\n if ('error' in res) {\n throw res.error;\n }\n return res.result;\n }\n default: {\n const res = create(unsafeRes, GetBlockRpcResult);\n if ('error' in res) {\n throw res.error;\n }\n const {result} = res;\n return result\n ? {\n ...result,\n transactions: result.transactions.map(\n ({transaction, meta, version}) => ({\n meta,\n transaction: {\n ...transaction,\n message: versionedMessageFromResponse(\n version,\n transaction.message,\n ),\n },\n version,\n }),\n ),\n }\n : null;\n }\n }\n } catch (e) {\n throw new SolanaJSONRPCError(\n e as JSONRPCError,\n 'failed to get confirmed block',\n );\n }\n }\n\n /**\n * Fetch parsed transaction details for a confirmed or finalized block\n */\n async getParsedBlock(\n slot: number,\n rawConfig?: GetVersionedBlockConfig,\n ): Promise;\n\n // eslint-disable-next-line no-dupe-class-members\n async getParsedBlock(\n slot: number,\n rawConfig: GetVersionedBlockConfig & {transactionDetails: 'accounts'},\n ): Promise;\n\n // eslint-disable-next-line no-dupe-class-members\n async getParsedBlock(\n slot: number,\n rawConfig: GetVersionedBlockConfig & {transactionDetails: 'none'},\n ): Promise;\n // eslint-disable-next-line no-dupe-class-members\n async getParsedBlock(\n slot: number,\n rawConfig?: GetVersionedBlockConfig,\n ): Promise<\n | ParsedBlockResponse\n | ParsedAccountsModeBlockResponse\n | ParsedNoneModeBlockResponse\n | null\n > {\n const {commitment, config} = extractCommitmentFromConfig(rawConfig);\n const args = this._buildArgsAtLeastConfirmed(\n [slot],\n commitment as Finality,\n 'jsonParsed',\n config,\n );\n const unsafeRes = await this._rpcRequest('getBlock', args);\n try {\n switch (config?.transactionDetails) {\n case 'accounts': {\n const res = create(unsafeRes, GetParsedAccountsModeBlockRpcResult);\n if ('error' in res) {\n throw res.error;\n }\n return res.result;\n }\n case 'none': {\n const res = create(unsafeRes, GetParsedNoneModeBlockRpcResult);\n if ('error' in res) {\n throw res.error;\n }\n return res.result;\n }\n default: {\n const res = create(unsafeRes, GetParsedBlockRpcResult);\n if ('error' in res) {\n throw res.error;\n }\n return res.result;\n }\n }\n } catch (e) {\n throw new SolanaJSONRPCError(e as JSONRPCError, 'failed to get block');\n }\n }\n\n /*\n * Returns the current block height of the node\n */\n getBlockHeight = (() => {\n const requestPromises: {[hash: string]: Promise} = {};\n return async (\n commitmentOrConfig?: Commitment | GetBlockHeightConfig,\n ): Promise => {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [],\n commitment,\n undefined /* encoding */,\n config,\n );\n const requestHash = fastStableStringify(args);\n requestPromises[requestHash] =\n requestPromises[requestHash] ??\n (async () => {\n try {\n const unsafeRes = await this._rpcRequest('getBlockHeight', args);\n const res = create(unsafeRes, jsonRpcResult(number()));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get block height information',\n );\n }\n return res.result;\n } finally {\n delete requestPromises[requestHash];\n }\n })();\n return await requestPromises[requestHash];\n };\n })();\n\n /*\n * Returns recent block production information from the current or previous epoch\n */\n async getBlockProduction(\n configOrCommitment?: GetBlockProductionConfig | Commitment,\n ): Promise> {\n let extra: Omit | undefined;\n let commitment: Commitment | undefined;\n\n if (typeof configOrCommitment === 'string') {\n commitment = configOrCommitment;\n } else if (configOrCommitment) {\n const {commitment: c, ...rest} = configOrCommitment;\n commitment = c;\n extra = rest;\n }\n\n const args = this._buildArgs([], commitment, 'base64', extra);\n const unsafeRes = await this._rpcRequest('getBlockProduction', args);\n const res = create(unsafeRes, BlockProductionResponseStruct);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get block production information',\n );\n }\n\n return res.result;\n }\n\n /**\n * Fetch a confirmed or finalized transaction from the cluster.\n *\n * @deprecated Instead, call `getTransaction` using a\n * `GetVersionedTransactionConfig` by setting the\n * `maxSupportedTransactionVersion` property.\n */\n async getTransaction(\n signature: string,\n rawConfig?: GetTransactionConfig,\n ): Promise;\n\n /**\n * Fetch a confirmed or finalized transaction from the cluster.\n */\n // eslint-disable-next-line no-dupe-class-members\n async getTransaction(\n signature: string,\n rawConfig: GetVersionedTransactionConfig,\n ): Promise;\n\n /**\n * Fetch a confirmed or finalized transaction from the cluster.\n */\n // eslint-disable-next-line no-dupe-class-members\n async getTransaction(\n signature: string,\n rawConfig?: GetVersionedTransactionConfig,\n ): Promise {\n const {commitment, config} = extractCommitmentFromConfig(rawConfig);\n const args = this._buildArgsAtLeastConfirmed(\n [signature],\n commitment as Finality,\n undefined /* encoding */,\n config,\n );\n const unsafeRes = await this._rpcRequest('getTransaction', args);\n const res = create(unsafeRes, GetTransactionRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get transaction');\n }\n\n const result = res.result;\n if (!result) return result;\n\n return {\n ...result,\n transaction: {\n ...result.transaction,\n message: versionedMessageFromResponse(\n result.version,\n result.transaction.message,\n ),\n },\n };\n }\n\n /**\n * Fetch parsed transaction details for a confirmed or finalized transaction\n */\n async getParsedTransaction(\n signature: TransactionSignature,\n commitmentOrConfig?: GetVersionedTransactionConfig | Finality,\n ): Promise {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgsAtLeastConfirmed(\n [signature],\n commitment as Finality,\n 'jsonParsed',\n config,\n );\n const unsafeRes = await this._rpcRequest('getTransaction', args);\n const res = create(unsafeRes, GetParsedTransactionRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get transaction');\n }\n return res.result;\n }\n\n /**\n * Fetch parsed transaction details for a batch of confirmed transactions\n */\n async getParsedTransactions(\n signatures: TransactionSignature[],\n commitmentOrConfig?: GetVersionedTransactionConfig | Finality,\n ): Promise<(ParsedTransactionWithMeta | null)[]> {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const batch = signatures.map(signature => {\n const args = this._buildArgsAtLeastConfirmed(\n [signature],\n commitment as Finality,\n 'jsonParsed',\n config,\n );\n return {\n methodName: 'getTransaction',\n args,\n };\n });\n\n const unsafeRes = await this._rpcBatchRequest(batch);\n const res = unsafeRes.map((unsafeRes: any) => {\n const res = create(unsafeRes, GetParsedTransactionRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get transactions');\n }\n return res.result;\n });\n\n return res;\n }\n\n /**\n * Fetch transaction details for a batch of confirmed transactions.\n * Similar to {@link getParsedTransactions} but returns a {@link TransactionResponse}.\n *\n * @deprecated Instead, call `getTransactions` using a\n * `GetVersionedTransactionConfig` by setting the\n * `maxSupportedTransactionVersion` property.\n */\n async getTransactions(\n signatures: TransactionSignature[],\n commitmentOrConfig?: GetTransactionConfig | Finality,\n ): Promise<(TransactionResponse | null)[]>;\n\n /**\n * Fetch transaction details for a batch of confirmed transactions.\n * Similar to {@link getParsedTransactions} but returns a {@link\n * VersionedTransactionResponse}.\n */\n // eslint-disable-next-line no-dupe-class-members\n async getTransactions(\n signatures: TransactionSignature[],\n commitmentOrConfig: GetVersionedTransactionConfig | Finality,\n ): Promise<(VersionedTransactionResponse | null)[]>;\n\n /**\n * Fetch transaction details for a batch of confirmed transactions.\n * Similar to {@link getParsedTransactions} but returns a {@link\n * VersionedTransactionResponse}.\n */\n // eslint-disable-next-line no-dupe-class-members\n async getTransactions(\n signatures: TransactionSignature[],\n commitmentOrConfig: GetVersionedTransactionConfig | Finality,\n ): Promise<(VersionedTransactionResponse | null)[]> {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const batch = signatures.map(signature => {\n const args = this._buildArgsAtLeastConfirmed(\n [signature],\n commitment as Finality,\n undefined /* encoding */,\n config,\n );\n return {\n methodName: 'getTransaction',\n args,\n };\n });\n\n const unsafeRes = await this._rpcBatchRequest(batch);\n const res = unsafeRes.map((unsafeRes: any) => {\n const res = create(unsafeRes, GetTransactionRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get transactions');\n }\n const result = res.result;\n if (!result) return result;\n\n return {\n ...result,\n transaction: {\n ...result.transaction,\n message: versionedMessageFromResponse(\n result.version,\n result.transaction.message,\n ),\n },\n };\n });\n\n return res;\n }\n\n /**\n * Fetch a list of Transactions and transaction statuses from the cluster\n * for a confirmed block.\n *\n * @deprecated Deprecated since RPC v1.7.0. Please use {@link getBlock} instead.\n */\n async getConfirmedBlock(\n slot: number,\n commitment?: Finality,\n ): Promise {\n const args = this._buildArgsAtLeastConfirmed([slot], commitment);\n const unsafeRes = await this._rpcRequest('getBlock', args);\n const res = create(unsafeRes, GetConfirmedBlockRpcResult);\n\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get confirmed block');\n }\n\n const result = res.result;\n if (!result) {\n throw new Error('Confirmed block ' + slot + ' not found');\n }\n\n const block = {\n ...result,\n transactions: result.transactions.map(({transaction, meta}) => {\n const message = new Message(transaction.message);\n return {\n meta,\n transaction: {\n ...transaction,\n message,\n },\n };\n }),\n };\n\n return {\n ...block,\n transactions: block.transactions.map(({transaction, meta}) => {\n return {\n meta,\n transaction: Transaction.populate(\n transaction.message,\n transaction.signatures,\n ),\n };\n }),\n };\n }\n\n /**\n * Fetch confirmed blocks between two slots\n */\n async getBlocks(\n startSlot: number,\n endSlot?: number,\n commitment?: Finality,\n ): Promise> {\n const args = this._buildArgsAtLeastConfirmed(\n endSlot !== undefined ? [startSlot, endSlot] : [startSlot],\n commitment,\n );\n const unsafeRes = await this._rpcRequest('getBlocks', args);\n const res = create(unsafeRes, jsonRpcResult(array(number())));\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get blocks');\n }\n return res.result;\n }\n\n /**\n * Fetch a list of Signatures from the cluster for a block, excluding rewards\n */\n async getBlockSignatures(\n slot: number,\n commitment?: Finality,\n ): Promise {\n const args = this._buildArgsAtLeastConfirmed(\n [slot],\n commitment,\n undefined,\n {\n transactionDetails: 'signatures',\n rewards: false,\n },\n );\n const unsafeRes = await this._rpcRequest('getBlock', args);\n const res = create(unsafeRes, GetBlockSignaturesRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get block');\n }\n const result = res.result;\n if (!result) {\n throw new Error('Block ' + slot + ' not found');\n }\n return result;\n }\n\n /**\n * Fetch a list of Signatures from the cluster for a confirmed block, excluding rewards\n *\n * @deprecated Deprecated since RPC v1.7.0. Please use {@link getBlockSignatures} instead.\n */\n async getConfirmedBlockSignatures(\n slot: number,\n commitment?: Finality,\n ): Promise {\n const args = this._buildArgsAtLeastConfirmed(\n [slot],\n commitment,\n undefined,\n {\n transactionDetails: 'signatures',\n rewards: false,\n },\n );\n const unsafeRes = await this._rpcRequest('getBlock', args);\n const res = create(unsafeRes, GetBlockSignaturesRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get confirmed block');\n }\n const result = res.result;\n if (!result) {\n throw new Error('Confirmed block ' + slot + ' not found');\n }\n return result;\n }\n\n /**\n * Fetch a transaction details for a confirmed transaction\n *\n * @deprecated Deprecated since RPC v1.7.0. Please use {@link getTransaction} instead.\n */\n async getConfirmedTransaction(\n signature: TransactionSignature,\n commitment?: Finality,\n ): Promise {\n const args = this._buildArgsAtLeastConfirmed([signature], commitment);\n const unsafeRes = await this._rpcRequest('getTransaction', args);\n const res = create(unsafeRes, GetTransactionRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(res.error, 'failed to get transaction');\n }\n\n const result = res.result;\n if (!result) return result;\n\n const message = new Message(result.transaction.message);\n const signatures = result.transaction.signatures;\n return {\n ...result,\n transaction: Transaction.populate(message, signatures),\n };\n }\n\n /**\n * Fetch parsed transaction details for a confirmed transaction\n *\n * @deprecated Deprecated since RPC v1.7.0. Please use {@link getParsedTransaction} instead.\n */\n async getParsedConfirmedTransaction(\n signature: TransactionSignature,\n commitment?: Finality,\n ): Promise {\n const args = this._buildArgsAtLeastConfirmed(\n [signature],\n commitment,\n 'jsonParsed',\n );\n const unsafeRes = await this._rpcRequest('getTransaction', args);\n const res = create(unsafeRes, GetParsedTransactionRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get confirmed transaction',\n );\n }\n return res.result;\n }\n\n /**\n * Fetch parsed transaction details for a batch of confirmed transactions\n *\n * @deprecated Deprecated since RPC v1.7.0. Please use {@link getParsedTransactions} instead.\n */\n async getParsedConfirmedTransactions(\n signatures: TransactionSignature[],\n commitment?: Finality,\n ): Promise<(ParsedConfirmedTransaction | null)[]> {\n const batch = signatures.map(signature => {\n const args = this._buildArgsAtLeastConfirmed(\n [signature],\n commitment,\n 'jsonParsed',\n );\n return {\n methodName: 'getTransaction',\n args,\n };\n });\n\n const unsafeRes = await this._rpcBatchRequest(batch);\n const res = unsafeRes.map((unsafeRes: any) => {\n const res = create(unsafeRes, GetParsedTransactionRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get confirmed transactions',\n );\n }\n return res.result;\n });\n\n return res;\n }\n\n /**\n * Fetch a list of all the confirmed signatures for transactions involving an address\n * within a specified slot range. Max range allowed is 10,000 slots.\n *\n * @deprecated Deprecated since RPC v1.3. Please use {@link getConfirmedSignaturesForAddress2} instead.\n *\n * @param address queried address\n * @param startSlot start slot, inclusive\n * @param endSlot end slot, inclusive\n */\n async getConfirmedSignaturesForAddress(\n address: PublicKey,\n startSlot: number,\n endSlot: number,\n ): Promise> {\n let options: any = {};\n\n let firstAvailableBlock = await this.getFirstAvailableBlock();\n while (!('until' in options)) {\n startSlot--;\n if (startSlot <= 0 || startSlot < firstAvailableBlock) {\n break;\n }\n\n try {\n const block = await this.getConfirmedBlockSignatures(\n startSlot,\n 'finalized',\n );\n if (block.signatures.length > 0) {\n options.until =\n block.signatures[block.signatures.length - 1].toString();\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('skipped')) {\n continue;\n } else {\n throw err;\n }\n }\n }\n\n let highestConfirmedRoot = await this.getSlot('finalized');\n while (!('before' in options)) {\n endSlot++;\n if (endSlot > highestConfirmedRoot) {\n break;\n }\n\n try {\n const block = await this.getConfirmedBlockSignatures(endSlot);\n if (block.signatures.length > 0) {\n options.before =\n block.signatures[block.signatures.length - 1].toString();\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('skipped')) {\n continue;\n } else {\n throw err;\n }\n }\n }\n\n const confirmedSignatureInfo = await this.getConfirmedSignaturesForAddress2(\n address,\n options,\n );\n return confirmedSignatureInfo.map(info => info.signature);\n }\n\n /**\n * Returns confirmed signatures for transactions involving an\n * address backwards in time from the provided signature or most recent confirmed block\n *\n * @deprecated Deprecated since RPC v1.7.0. Please use {@link getSignaturesForAddress} instead.\n */\n async getConfirmedSignaturesForAddress2(\n address: PublicKey,\n options?: ConfirmedSignaturesForAddress2Options,\n commitment?: Finality,\n ): Promise> {\n const args = this._buildArgsAtLeastConfirmed(\n [address.toBase58()],\n commitment,\n undefined,\n options,\n );\n const unsafeRes = await this._rpcRequest(\n 'getConfirmedSignaturesForAddress2',\n args,\n );\n const res = create(unsafeRes, GetConfirmedSignaturesForAddress2RpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get confirmed signatures for address',\n );\n }\n return res.result;\n }\n\n /**\n * Returns confirmed signatures for transactions involving an\n * address backwards in time from the provided signature or most recent confirmed block\n *\n *\n * @param address queried address\n * @param options\n */\n async getSignaturesForAddress(\n address: PublicKey,\n options?: SignaturesForAddressOptions,\n commitment?: Finality,\n ): Promise> {\n const args = this._buildArgsAtLeastConfirmed(\n [address.toBase58()],\n commitment,\n undefined,\n options,\n );\n const unsafeRes = await this._rpcRequest('getSignaturesForAddress', args);\n const res = create(unsafeRes, GetSignaturesForAddressRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n 'failed to get signatures for address',\n );\n }\n return res.result;\n }\n\n async getAddressLookupTable(\n accountKey: PublicKey,\n config?: GetAccountInfoConfig,\n ): Promise> {\n const {context, value: accountInfo} = await this.getAccountInfoAndContext(\n accountKey,\n config,\n );\n\n let value = null;\n if (accountInfo !== null) {\n value = new AddressLookupTableAccount({\n key: accountKey,\n state: AddressLookupTableAccount.deserialize(accountInfo.data),\n });\n }\n\n return {\n context,\n value,\n };\n }\n\n /**\n * Fetch the contents of a Nonce account from the cluster, return with context\n */\n async getNonceAndContext(\n nonceAccount: PublicKey,\n commitmentOrConfig?: Commitment | GetNonceAndContextConfig,\n ): Promise> {\n const {context, value: accountInfo} = await this.getAccountInfoAndContext(\n nonceAccount,\n commitmentOrConfig,\n );\n\n let value = null;\n if (accountInfo !== null) {\n value = NonceAccount.fromAccountData(accountInfo.data);\n }\n\n return {\n context,\n value,\n };\n }\n\n /**\n * Fetch the contents of a Nonce account from the cluster\n */\n async getNonce(\n nonceAccount: PublicKey,\n commitmentOrConfig?: Commitment | GetNonceConfig,\n ): Promise {\n return await this.getNonceAndContext(nonceAccount, commitmentOrConfig)\n .then(x => x.value)\n .catch(e => {\n throw new Error(\n 'failed to get nonce for account ' +\n nonceAccount.toBase58() +\n ': ' +\n e,\n );\n });\n }\n\n /**\n * Request an allocation of lamports to the specified address\n *\n * ```typescript\n * import { Connection, PublicKey, LAMPORTS_PER_SOL } from \"@solana/web3.js\";\n *\n * (async () => {\n * const connection = new Connection(\"https://api.testnet.solana.com\", \"confirmed\");\n * const myAddress = new PublicKey(\"2nr1bHFT86W9tGnyvmYW4vcHKsQB3sVQfnddasz4kExM\");\n * const signature = await connection.requestAirdrop(myAddress, LAMPORTS_PER_SOL);\n * await connection.confirmTransaction(signature);\n * })();\n * ```\n */\n async requestAirdrop(\n to: PublicKey,\n lamports: number,\n ): Promise {\n const unsafeRes = await this._rpcRequest('requestAirdrop', [\n to.toBase58(),\n lamports,\n ]);\n const res = create(unsafeRes, RequestAirdropRpcResult);\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `airdrop to ${to.toBase58()} failed`,\n );\n }\n return res.result;\n }\n\n /**\n * @internal\n */\n async _blockhashWithExpiryBlockHeight(\n disableCache: boolean,\n ): Promise {\n if (!disableCache) {\n // Wait for polling to finish\n while (this._pollingBlockhash) {\n await sleep(100);\n }\n const timeSinceFetch = Date.now() - this._blockhashInfo.lastFetch;\n const expired = timeSinceFetch >= BLOCKHASH_CACHE_TIMEOUT_MS;\n if (this._blockhashInfo.latestBlockhash !== null && !expired) {\n return this._blockhashInfo.latestBlockhash;\n }\n }\n\n return await this._pollNewBlockhash();\n }\n\n /**\n * @internal\n */\n async _pollNewBlockhash(): Promise {\n this._pollingBlockhash = true;\n try {\n const startTime = Date.now();\n const cachedLatestBlockhash = this._blockhashInfo.latestBlockhash;\n const cachedBlockhash = cachedLatestBlockhash\n ? cachedLatestBlockhash.blockhash\n : null;\n for (let i = 0; i < 50; i++) {\n const latestBlockhash = await this.getLatestBlockhash('finalized');\n\n if (cachedBlockhash !== latestBlockhash.blockhash) {\n this._blockhashInfo = {\n latestBlockhash,\n lastFetch: Date.now(),\n transactionSignatures: [],\n simulatedSignatures: [],\n };\n return latestBlockhash;\n }\n\n // Sleep for approximately half a slot\n await sleep(MS_PER_SLOT / 2);\n }\n\n throw new Error(\n `Unable to obtain a new blockhash after ${Date.now() - startTime}ms`,\n );\n } finally {\n this._pollingBlockhash = false;\n }\n }\n\n /**\n * get the stake minimum delegation\n */\n async getStakeMinimumDelegation(\n config?: GetStakeMinimumDelegationConfig,\n ): Promise> {\n const {commitment, config: configArg} = extractCommitmentFromConfig(config);\n const args = this._buildArgs([], commitment, 'base64', configArg);\n const unsafeRes = await this._rpcRequest('getStakeMinimumDelegation', args);\n const res = create(unsafeRes, jsonRpcResultAndContext(number()));\n if ('error' in res) {\n throw new SolanaJSONRPCError(\n res.error,\n `failed to get stake minimum delegation`,\n );\n }\n return res.result;\n }\n\n /**\n * Simulate a transaction\n *\n * @deprecated Instead, call {@link simulateTransaction} with {@link\n * VersionedTransaction} and {@link SimulateTransactionConfig} parameters\n */\n simulateTransaction(\n transactionOrMessage: Transaction | Message,\n signers?: Array,\n includeAccounts?: boolean | Array,\n ): Promise>;\n\n /**\n * Simulate a transaction\n */\n // eslint-disable-next-line no-dupe-class-members\n simulateTransaction(\n transaction: VersionedTransaction,\n config?: SimulateTransactionConfig,\n ): Promise>;\n\n /**\n * Simulate a transaction\n */\n // eslint-disable-next-line no-dupe-class-members\n async simulateTransaction(\n transactionOrMessage: VersionedTransaction | Transaction | Message,\n configOrSigners?: SimulateTransactionConfig | Array,\n includeAccounts?: boolean | Array,\n ): Promise> {\n if ('message' in transactionOrMessage) {\n const versionedTx = transactionOrMessage;\n const wireTransaction = versionedTx.serialize();\n const encodedTransaction =\n Buffer.from(wireTransaction).toString('base64');\n if (Array.isArray(configOrSigners) || includeAccounts !== undefined) {\n throw new Error('Invalid arguments');\n }\n\n const config: any = configOrSigners || {};\n config.encoding = 'base64';\n if (!('commitment' in config)) {\n config.commitment = this.commitment;\n }\n\n if (\n configOrSigners &&\n typeof configOrSigners === 'object' &&\n 'innerInstructions' in configOrSigners\n ) {\n config.innerInstructions = configOrSigners.innerInstructions;\n }\n\n const args = [encodedTransaction, config];\n const unsafeRes = await this._rpcRequest('simulateTransaction', args);\n const res = create(unsafeRes, SimulatedTransactionResponseStruct);\n if ('error' in res) {\n throw new Error('failed to simulate transaction: ' + res.error.message);\n }\n return res.result;\n }\n\n let transaction;\n if (transactionOrMessage instanceof Transaction) {\n let originalTx: Transaction = transactionOrMessage;\n transaction = new Transaction();\n transaction.feePayer = originalTx.feePayer;\n transaction.instructions = transactionOrMessage.instructions;\n transaction.nonceInfo = originalTx.nonceInfo;\n transaction.signatures = originalTx.signatures;\n } else {\n transaction = Transaction.populate(transactionOrMessage);\n // HACK: this function relies on mutating the populated transaction\n transaction._message = transaction._json = undefined;\n }\n\n if (configOrSigners !== undefined && !Array.isArray(configOrSigners)) {\n throw new Error('Invalid arguments');\n }\n\n const signers = configOrSigners;\n if (transaction.nonceInfo && signers) {\n transaction.sign(...signers);\n } else {\n let disableCache = this._disableBlockhashCaching;\n for (;;) {\n const latestBlockhash =\n await this._blockhashWithExpiryBlockHeight(disableCache);\n transaction.lastValidBlockHeight = latestBlockhash.lastValidBlockHeight;\n transaction.recentBlockhash = latestBlockhash.blockhash;\n\n if (!signers) break;\n\n transaction.sign(...signers);\n if (!transaction.signature) {\n throw new Error('!signature'); // should never happen\n }\n\n const signature = transaction.signature.toString('base64');\n if (\n !this._blockhashInfo.simulatedSignatures.includes(signature) &&\n !this._blockhashInfo.transactionSignatures.includes(signature)\n ) {\n // The signature of this transaction has not been seen before with the\n // current recentBlockhash, all done. Let's break\n this._blockhashInfo.simulatedSignatures.push(signature);\n break;\n } else {\n // This transaction would be treated as duplicate (its derived signature\n // matched to one of already recorded signatures).\n // So, we must fetch a new blockhash for a different signature by disabling\n // our cache not to wait for the cache expiration (BLOCKHASH_CACHE_TIMEOUT_MS).\n disableCache = true;\n }\n }\n }\n\n const message = transaction._compile();\n const signData = message.serialize();\n const wireTransaction = transaction._serialize(signData);\n const encodedTransaction = wireTransaction.toString('base64');\n const config: any = {\n encoding: 'base64',\n commitment: this.commitment,\n };\n\n if (includeAccounts) {\n const addresses = (\n Array.isArray(includeAccounts)\n ? includeAccounts\n : message.nonProgramIds()\n ).map(key => key.toBase58());\n\n config['accounts'] = {\n encoding: 'base64',\n addresses,\n };\n }\n\n if (signers) {\n config.sigVerify = true;\n }\n\n if (\n configOrSigners &&\n typeof configOrSigners === 'object' &&\n 'innerInstructions' in configOrSigners\n ) {\n config.innerInstructions = configOrSigners.innerInstructions;\n }\n\n const args = [encodedTransaction, config];\n const unsafeRes = await this._rpcRequest('simulateTransaction', args);\n const res = create(unsafeRes, SimulatedTransactionResponseStruct);\n if ('error' in res) {\n let logs;\n if ('data' in res.error) {\n logs = res.error.data.logs;\n if (logs && Array.isArray(logs)) {\n const traceIndent = '\\n ';\n const logTrace = traceIndent + logs.join(traceIndent);\n console.error(res.error.message, logTrace);\n }\n }\n\n throw new SendTransactionError({\n action: 'simulate',\n signature: '',\n transactionMessage: res.error.message,\n logs: logs,\n });\n }\n return res.result;\n }\n\n /**\n * Sign and send a transaction\n *\n * @deprecated Instead, call {@link sendTransaction} with a {@link\n * VersionedTransaction}\n */\n sendTransaction(\n transaction: Transaction,\n signers: Array,\n options?: SendOptions,\n ): Promise;\n\n /**\n * Send a signed transaction\n */\n // eslint-disable-next-line no-dupe-class-members\n sendTransaction(\n transaction: VersionedTransaction,\n options?: SendOptions,\n ): Promise;\n\n /**\n * Sign and send a transaction\n */\n // eslint-disable-next-line no-dupe-class-members\n async sendTransaction(\n transaction: VersionedTransaction | Transaction,\n signersOrOptions?: Array | SendOptions,\n options?: SendOptions,\n ): Promise {\n if ('version' in transaction) {\n if (signersOrOptions && Array.isArray(signersOrOptions)) {\n throw new Error('Invalid arguments');\n }\n\n const wireTransaction = transaction.serialize();\n return await this.sendRawTransaction(wireTransaction, signersOrOptions);\n }\n\n if (signersOrOptions === undefined || !Array.isArray(signersOrOptions)) {\n throw new Error('Invalid arguments');\n }\n\n const signers = signersOrOptions;\n if (transaction.nonceInfo) {\n transaction.sign(...signers);\n } else {\n let disableCache = this._disableBlockhashCaching;\n for (;;) {\n const latestBlockhash =\n await this._blockhashWithExpiryBlockHeight(disableCache);\n transaction.lastValidBlockHeight = latestBlockhash.lastValidBlockHeight;\n transaction.recentBlockhash = latestBlockhash.blockhash;\n transaction.sign(...signers);\n if (!transaction.signature) {\n throw new Error('!signature'); // should never happen\n }\n\n const signature = transaction.signature.toString('base64');\n if (!this._blockhashInfo.transactionSignatures.includes(signature)) {\n // The signature of this transaction has not been seen before with the\n // current recentBlockhash, all done. Let's break\n this._blockhashInfo.transactionSignatures.push(signature);\n break;\n } else {\n // This transaction would be treated as duplicate (its derived signature\n // matched to one of already recorded signatures).\n // So, we must fetch a new blockhash for a different signature by disabling\n // our cache not to wait for the cache expiration (BLOCKHASH_CACHE_TIMEOUT_MS).\n disableCache = true;\n }\n }\n }\n\n const wireTransaction = transaction.serialize();\n return await this.sendRawTransaction(wireTransaction, options);\n }\n\n /**\n * Send a transaction that has already been signed and serialized into the\n * wire format\n */\n async sendRawTransaction(\n rawTransaction: Buffer | Uint8Array | Array,\n options?: SendOptions,\n ): Promise {\n const encodedTransaction = toBuffer(rawTransaction).toString('base64');\n const result = await this.sendEncodedTransaction(\n encodedTransaction,\n options,\n );\n return result;\n }\n\n /**\n * Send a transaction that has already been signed, serialized into the\n * wire format, and encoded as a base64 string\n */\n async sendEncodedTransaction(\n encodedTransaction: string,\n options?: SendOptions,\n ): Promise {\n const config: any = {encoding: 'base64'};\n const skipPreflight = options && options.skipPreflight;\n const preflightCommitment =\n skipPreflight === true\n ? 'processed' // FIXME Remove when https://github.com/anza-xyz/agave/pull/483 is deployed.\n : (options && options.preflightCommitment) || this.commitment;\n\n if (options && options.maxRetries != null) {\n config.maxRetries = options.maxRetries;\n }\n if (options && options.minContextSlot != null) {\n config.minContextSlot = options.minContextSlot;\n }\n if (skipPreflight) {\n config.skipPreflight = skipPreflight;\n }\n if (preflightCommitment) {\n config.preflightCommitment = preflightCommitment;\n }\n\n const args = [encodedTransaction, config];\n const unsafeRes = await this._rpcRequest('sendTransaction', args);\n const res = create(unsafeRes, SendTransactionRpcResult);\n if ('error' in res) {\n let logs = undefined;\n if ('data' in res.error) {\n logs = res.error.data.logs;\n }\n\n throw new SendTransactionError({\n action: skipPreflight ? 'send' : 'simulate',\n signature: '',\n transactionMessage: res.error.message,\n logs: logs,\n });\n }\n return res.result;\n }\n\n /**\n * @internal\n */\n _wsOnOpen() {\n this._rpcWebSocketConnected = true;\n this._rpcWebSocketHeartbeat = setInterval(() => {\n // Ping server every 5s to prevent idle timeouts\n (async () => {\n try {\n await this._rpcWebSocket.notify('ping');\n // eslint-disable-next-line no-empty\n } catch {}\n })();\n }, 5000);\n this._updateSubscriptions();\n }\n\n /**\n * @internal\n */\n _wsOnError(err: Error) {\n this._rpcWebSocketConnected = false;\n console.error('ws error:', err.message);\n }\n\n /**\n * @internal\n */\n _wsOnClose(code: number) {\n this._rpcWebSocketConnected = false;\n this._rpcWebSocketGeneration =\n (this._rpcWebSocketGeneration + 1) % Number.MAX_SAFE_INTEGER;\n if (this._rpcWebSocketIdleTimeout) {\n clearTimeout(this._rpcWebSocketIdleTimeout);\n this._rpcWebSocketIdleTimeout = null;\n }\n if (this._rpcWebSocketHeartbeat) {\n clearInterval(this._rpcWebSocketHeartbeat);\n this._rpcWebSocketHeartbeat = null;\n }\n\n if (code === 1000) {\n // explicit close, check if any subscriptions have been made since close\n this._updateSubscriptions();\n return;\n }\n\n // implicit close, prepare subscriptions for auto-reconnect\n this._subscriptionCallbacksByServerSubscriptionId = {};\n Object.entries(\n this._subscriptionsByHash as Record,\n ).forEach(([hash, subscription]) => {\n this._setSubscription(hash, {\n ...subscription,\n state: 'pending',\n });\n });\n }\n\n /**\n * @internal\n */\n private _setSubscription(\n hash: SubscriptionConfigHash,\n nextSubscription: Subscription,\n ) {\n const prevState = this._subscriptionsByHash[hash]?.state;\n this._subscriptionsByHash[hash] = nextSubscription;\n if (prevState !== nextSubscription.state) {\n const stateChangeCallbacks =\n this._subscriptionStateChangeCallbacksByHash[hash];\n if (stateChangeCallbacks) {\n stateChangeCallbacks.forEach(cb => {\n try {\n cb(nextSubscription.state);\n // eslint-disable-next-line no-empty\n } catch {}\n });\n }\n }\n }\n\n /**\n * @internal\n */\n private _onSubscriptionStateChange(\n clientSubscriptionId: ClientSubscriptionId,\n callback: SubscriptionStateChangeCallback,\n ): SubscriptionStateChangeDisposeFn {\n const hash =\n this._subscriptionHashByClientSubscriptionId[clientSubscriptionId];\n if (hash == null) {\n return () => {};\n }\n const stateChangeCallbacks = (this._subscriptionStateChangeCallbacksByHash[\n hash\n ] ||= new Set());\n stateChangeCallbacks.add(callback);\n return () => {\n stateChangeCallbacks.delete(callback);\n if (stateChangeCallbacks.size === 0) {\n delete this._subscriptionStateChangeCallbacksByHash[hash];\n }\n };\n }\n\n /**\n * @internal\n */\n async _updateSubscriptions() {\n if (Object.keys(this._subscriptionsByHash).length === 0) {\n if (this._rpcWebSocketConnected) {\n this._rpcWebSocketConnected = false;\n this._rpcWebSocketIdleTimeout = setTimeout(() => {\n this._rpcWebSocketIdleTimeout = null;\n try {\n this._rpcWebSocket.close();\n } catch (err) {\n // swallow error if socket has already been closed.\n if (err instanceof Error) {\n console.log(\n `Error when closing socket connection: ${err.message}`,\n );\n }\n }\n }, 500);\n }\n return;\n }\n\n if (this._rpcWebSocketIdleTimeout !== null) {\n clearTimeout(this._rpcWebSocketIdleTimeout);\n this._rpcWebSocketIdleTimeout = null;\n this._rpcWebSocketConnected = true;\n }\n\n if (!this._rpcWebSocketConnected) {\n this._rpcWebSocket.connect();\n return;\n }\n\n const activeWebSocketGeneration = this._rpcWebSocketGeneration;\n const isCurrentConnectionStillActive = () => {\n return activeWebSocketGeneration === this._rpcWebSocketGeneration;\n };\n\n await Promise.all(\n // Don't be tempted to change this to `Object.entries`. We call\n // `_updateSubscriptions` recursively when processing the state,\n // so it's important that we look up the *current* version of\n // each subscription, every time we process a hash.\n Object.keys(this._subscriptionsByHash).map(async hash => {\n const subscription = this._subscriptionsByHash[hash];\n if (subscription === undefined) {\n // This entry has since been deleted. Skip.\n return;\n }\n switch (subscription.state) {\n case 'pending':\n case 'unsubscribed':\n if (subscription.callbacks.size === 0) {\n /**\n * You can end up here when:\n *\n * - a subscription has recently unsubscribed\n * without having new callbacks added to it\n * while the unsubscribe was in flight, or\n * - when a pending subscription has its\n * listeners removed before a request was\n * sent to the server.\n *\n * Being that nobody is interested in this\n * subscription any longer, delete it.\n */\n delete this._subscriptionsByHash[hash];\n if (subscription.state === 'unsubscribed') {\n delete this._subscriptionCallbacksByServerSubscriptionId[\n subscription.serverSubscriptionId\n ];\n }\n await this._updateSubscriptions();\n return;\n }\n await (async () => {\n const {args, method} = subscription;\n try {\n this._setSubscription(hash, {\n ...subscription,\n state: 'subscribing',\n });\n const serverSubscriptionId: ServerSubscriptionId =\n (await this._rpcWebSocket.call(method, args)) as number;\n this._setSubscription(hash, {\n ...subscription,\n serverSubscriptionId,\n state: 'subscribed',\n });\n this._subscriptionCallbacksByServerSubscriptionId[\n serverSubscriptionId\n ] = subscription.callbacks;\n await this._updateSubscriptions();\n } catch (e) {\n console.error(\n `Received ${e instanceof Error ? '' : 'JSON-RPC '}error calling \\`${method}\\``,\n {\n args,\n error: e,\n },\n );\n if (!isCurrentConnectionStillActive()) {\n return;\n }\n // TODO: Maybe add an 'errored' state or a retry limit?\n this._setSubscription(hash, {\n ...subscription,\n state: 'pending',\n });\n await this._updateSubscriptions();\n }\n })();\n break;\n case 'subscribed':\n if (subscription.callbacks.size === 0) {\n // By the time we successfully set up a subscription\n // with the server, the client stopped caring about it.\n // Tear it down now.\n await (async () => {\n const {serverSubscriptionId, unsubscribeMethod} = subscription;\n if (\n this._subscriptionsAutoDisposedByRpc.has(serverSubscriptionId)\n ) {\n /**\n * Special case.\n * If we're dealing with a subscription that has been auto-\n * disposed by the RPC, then we can skip the RPC call to\n * tear down the subscription here.\n *\n * NOTE: There is a proposal to eliminate this special case, here:\n * https://github.com/solana-labs/solana/issues/18892\n */\n this._subscriptionsAutoDisposedByRpc.delete(\n serverSubscriptionId,\n );\n } else {\n this._setSubscription(hash, {\n ...subscription,\n state: 'unsubscribing',\n });\n this._setSubscription(hash, {\n ...subscription,\n state: 'unsubscribing',\n });\n try {\n await this._rpcWebSocket.call(unsubscribeMethod, [\n serverSubscriptionId,\n ]);\n } catch (e) {\n if (e instanceof Error) {\n console.error(`${unsubscribeMethod} error:`, e.message);\n }\n if (!isCurrentConnectionStillActive()) {\n return;\n }\n // TODO: Maybe add an 'errored' state or a retry limit?\n this._setSubscription(hash, {\n ...subscription,\n state: 'subscribed',\n });\n await this._updateSubscriptions();\n return;\n }\n }\n this._setSubscription(hash, {\n ...subscription,\n state: 'unsubscribed',\n });\n await this._updateSubscriptions();\n })();\n }\n break;\n case 'subscribing':\n case 'unsubscribing':\n break;\n }\n }),\n );\n }\n\n /**\n * @internal\n */\n private _handleServerNotification<\n TCallback extends SubscriptionConfig['callback'],\n >(\n serverSubscriptionId: ServerSubscriptionId,\n callbackArgs: Parameters,\n ): void {\n const callbacks =\n this._subscriptionCallbacksByServerSubscriptionId[serverSubscriptionId];\n if (callbacks === undefined) {\n return;\n }\n callbacks.forEach(cb => {\n try {\n cb(\n // I failed to find a way to convince TypeScript that `cb` is of type\n // `TCallback` which is certainly compatible with `Parameters`.\n // See https://github.com/microsoft/TypeScript/issues/47615\n // @ts-ignore\n ...callbackArgs,\n );\n } catch (e) {\n console.error(e);\n }\n });\n }\n\n /**\n * @internal\n */\n _wsOnAccountNotification(notification: object) {\n const {result, subscription} = create(\n notification,\n AccountNotificationResult,\n );\n this._handleServerNotification(subscription, [\n result.value,\n result.context,\n ]);\n }\n\n /**\n * @internal\n */\n private _makeSubscription(\n subscriptionConfig: SubscriptionConfig,\n /**\n * When preparing `args` for a call to `_makeSubscription`, be sure\n * to carefully apply a default `commitment` property, if necessary.\n *\n * - If the user supplied a `commitment` use that.\n * - Otherwise, if the `Connection::commitment` is set, use that.\n * - Otherwise, set it to the RPC server default: `finalized`.\n *\n * This is extremely important to ensure that these two fundamentally\n * identical subscriptions produce the same identifying hash:\n *\n * - A subscription made without specifying a commitment.\n * - A subscription made where the commitment specified is the same\n * as the default applied to the subscription above.\n *\n * Example; these two subscriptions must produce the same hash:\n *\n * - An `accountSubscribe` subscription for `'PUBKEY'`\n * - An `accountSubscribe` subscription for `'PUBKEY'` with commitment\n * `'finalized'`.\n *\n * See the 'making a subscription with defaulted params omitted' test\n * in `connection-subscriptions.ts` for more.\n */\n args: IWSRequestParams,\n ): ClientSubscriptionId {\n const clientSubscriptionId = this._nextClientSubscriptionId++;\n const hash = fastStableStringify([subscriptionConfig.method, args]);\n const existingSubscription = this._subscriptionsByHash[hash];\n if (existingSubscription === undefined) {\n this._subscriptionsByHash[hash] = {\n ...subscriptionConfig,\n args,\n callbacks: new Set([subscriptionConfig.callback]),\n state: 'pending',\n };\n } else {\n existingSubscription.callbacks.add(subscriptionConfig.callback);\n }\n this._subscriptionHashByClientSubscriptionId[clientSubscriptionId] = hash;\n this._subscriptionDisposeFunctionsByClientSubscriptionId[\n clientSubscriptionId\n ] = async () => {\n delete this._subscriptionDisposeFunctionsByClientSubscriptionId[\n clientSubscriptionId\n ];\n delete this._subscriptionHashByClientSubscriptionId[clientSubscriptionId];\n const subscription = this._subscriptionsByHash[hash];\n assert(\n subscription !== undefined,\n `Could not find a \\`Subscription\\` when tearing down client subscription #${clientSubscriptionId}`,\n );\n subscription.callbacks.delete(subscriptionConfig.callback);\n await this._updateSubscriptions();\n };\n this._updateSubscriptions();\n return clientSubscriptionId;\n }\n\n /**\n * Register a callback to be invoked whenever the specified account changes\n *\n * @param publicKey Public key of the account to monitor\n * @param callback Function to invoke whenever the account is changed\n * @param config\n * @return subscription id\n */\n onAccountChange(\n publicKey: PublicKey,\n callback: AccountChangeCallback,\n config?: AccountSubscriptionConfig,\n ): ClientSubscriptionId;\n /** @deprecated Instead, pass in an {@link AccountSubscriptionConfig} */\n // eslint-disable-next-line no-dupe-class-members\n onAccountChange(\n publicKey: PublicKey,\n callback: AccountChangeCallback,\n commitment?: Commitment,\n ): ClientSubscriptionId;\n // eslint-disable-next-line no-dupe-class-members\n onAccountChange(\n publicKey: PublicKey,\n callback: AccountChangeCallback,\n commitmentOrConfig?: Commitment | AccountSubscriptionConfig,\n ): ClientSubscriptionId {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [publicKey.toBase58()],\n commitment || this._commitment || 'finalized', // Apply connection/server default.\n 'base64',\n config,\n );\n return this._makeSubscription(\n {\n callback,\n method: 'accountSubscribe',\n unsubscribeMethod: 'accountUnsubscribe',\n },\n args,\n );\n }\n\n /**\n * Deregister an account notification callback\n *\n * @param clientSubscriptionId client subscription id to deregister\n */\n async removeAccountChangeListener(\n clientSubscriptionId: ClientSubscriptionId,\n ): Promise {\n await this._unsubscribeClientSubscription(\n clientSubscriptionId,\n 'account change',\n );\n }\n\n /**\n * @internal\n */\n _wsOnProgramAccountNotification(notification: Object) {\n const {result, subscription} = create(\n notification,\n ProgramAccountNotificationResult,\n );\n this._handleServerNotification(subscription, [\n {\n accountId: result.value.pubkey,\n accountInfo: result.value.account,\n },\n result.context,\n ]);\n }\n\n /**\n * Register a callback to be invoked whenever accounts owned by the\n * specified program change\n *\n * @param programId Public key of the program to monitor\n * @param callback Function to invoke whenever the account is changed\n * @param config\n * @return subscription id\n */\n onProgramAccountChange(\n programId: PublicKey,\n callback: ProgramAccountChangeCallback,\n config?: ProgramAccountSubscriptionConfig,\n ): ClientSubscriptionId;\n /** @deprecated Instead, pass in a {@link ProgramAccountSubscriptionConfig} */\n // eslint-disable-next-line no-dupe-class-members\n onProgramAccountChange(\n programId: PublicKey,\n callback: ProgramAccountChangeCallback,\n commitment?: Commitment,\n filters?: GetProgramAccountsFilter[],\n ): ClientSubscriptionId;\n // eslint-disable-next-line no-dupe-class-members\n onProgramAccountChange(\n programId: PublicKey,\n callback: ProgramAccountChangeCallback,\n commitmentOrConfig?: Commitment | ProgramAccountSubscriptionConfig,\n maybeFilters?: GetProgramAccountsFilter[],\n ): ClientSubscriptionId {\n const {commitment, config} =\n extractCommitmentFromConfig(commitmentOrConfig);\n const args = this._buildArgs(\n [programId.toBase58()],\n commitment || this._commitment || 'finalized', // Apply connection/server default.\n 'base64' /* encoding */,\n config\n ? config\n : maybeFilters\n ? {filters: applyDefaultMemcmpEncodingToFilters(maybeFilters)}\n : undefined /* extra */,\n );\n return this._makeSubscription(\n {\n callback,\n method: 'programSubscribe',\n unsubscribeMethod: 'programUnsubscribe',\n },\n args,\n );\n }\n\n /**\n * Deregister an account notification callback\n *\n * @param clientSubscriptionId client subscription id to deregister\n */\n async removeProgramAccountChangeListener(\n clientSubscriptionId: ClientSubscriptionId,\n ): Promise {\n await this._unsubscribeClientSubscription(\n clientSubscriptionId,\n 'program account change',\n );\n }\n\n /**\n * Registers a callback to be invoked whenever logs are emitted.\n */\n onLogs(\n filter: LogsFilter,\n callback: LogsCallback,\n commitment?: Commitment,\n ): ClientSubscriptionId {\n const args = this._buildArgs(\n [typeof filter === 'object' ? {mentions: [filter.toString()]} : filter],\n commitment || this._commitment || 'finalized', // Apply connection/server default.\n );\n return this._makeSubscription(\n {\n callback,\n method: 'logsSubscribe',\n unsubscribeMethod: 'logsUnsubscribe',\n },\n args,\n );\n }\n\n /**\n * Deregister a logs callback.\n *\n * @param clientSubscriptionId client subscription id to deregister.\n */\n async removeOnLogsListener(\n clientSubscriptionId: ClientSubscriptionId,\n ): Promise {\n await this._unsubscribeClientSubscription(clientSubscriptionId, 'logs');\n }\n\n /**\n * @internal\n */\n _wsOnLogsNotification(notification: Object) {\n const {result, subscription} = create(notification, LogsNotificationResult);\n this._handleServerNotification(subscription, [\n result.value,\n result.context,\n ]);\n }\n\n /**\n * @internal\n */\n _wsOnSlotNotification(notification: Object) {\n const {result, subscription} = create(notification, SlotNotificationResult);\n this._handleServerNotification(subscription, [result]);\n }\n\n /**\n * Register a callback to be invoked upon slot changes\n *\n * @param callback Function to invoke whenever the slot changes\n * @return subscription id\n */\n onSlotChange(callback: SlotChangeCallback): ClientSubscriptionId {\n return this._makeSubscription(\n {\n callback,\n method: 'slotSubscribe',\n unsubscribeMethod: 'slotUnsubscribe',\n },\n [] /* args */,\n );\n }\n\n /**\n * Deregister a slot notification callback\n *\n * @param clientSubscriptionId client subscription id to deregister\n */\n async removeSlotChangeListener(\n clientSubscriptionId: ClientSubscriptionId,\n ): Promise {\n await this._unsubscribeClientSubscription(\n clientSubscriptionId,\n 'slot change',\n );\n }\n\n /**\n * @internal\n */\n _wsOnSlotUpdatesNotification(notification: Object) {\n const {result, subscription} = create(\n notification,\n SlotUpdateNotificationResult,\n );\n this._handleServerNotification(subscription, [result]);\n }\n\n /**\n * Register a callback to be invoked upon slot updates. {@link SlotUpdate}'s\n * may be useful to track live progress of a cluster.\n *\n * @param callback Function to invoke whenever the slot updates\n * @return subscription id\n */\n onSlotUpdate(callback: SlotUpdateCallback): ClientSubscriptionId {\n return this._makeSubscription(\n {\n callback,\n method: 'slotsUpdatesSubscribe',\n unsubscribeMethod: 'slotsUpdatesUnsubscribe',\n },\n [] /* args */,\n );\n }\n\n /**\n * Deregister a slot update notification callback\n *\n * @param clientSubscriptionId client subscription id to deregister\n */\n async removeSlotUpdateListener(\n clientSubscriptionId: ClientSubscriptionId,\n ): Promise {\n await this._unsubscribeClientSubscription(\n clientSubscriptionId,\n 'slot update',\n );\n }\n\n /**\n * @internal\n */\n\n private async _unsubscribeClientSubscription(\n clientSubscriptionId: ClientSubscriptionId,\n subscriptionName: string,\n ) {\n const dispose =\n this._subscriptionDisposeFunctionsByClientSubscriptionId[\n clientSubscriptionId\n ];\n if (dispose) {\n await dispose();\n } else {\n console.warn(\n 'Ignored unsubscribe request because an active subscription with id ' +\n `\\`${clientSubscriptionId}\\` for '${subscriptionName}' events ` +\n 'could not be found.',\n );\n }\n }\n\n _buildArgs(\n args: Array,\n override?: Commitment,\n encoding?: 'jsonParsed' | 'base64',\n extra?: any,\n ): Array {\n const commitment = override || this._commitment;\n if (commitment || encoding || extra) {\n let options: any = {};\n if (encoding) {\n options.encoding = encoding;\n }\n if (commitment) {\n options.commitment = commitment;\n }\n if (extra) {\n options = Object.assign(options, extra);\n }\n args.push(options);\n }\n return args;\n }\n\n /**\n * @internal\n */\n _buildArgsAtLeastConfirmed(\n args: Array,\n override?: Finality,\n encoding?: 'jsonParsed' | 'base64',\n extra?: any,\n ): Array {\n const commitment = override || this._commitment;\n if (commitment && !['confirmed', 'finalized'].includes(commitment)) {\n throw new Error(\n 'Using Connection with default commitment: `' +\n this._commitment +\n '`, but method requires at least `confirmed`',\n );\n }\n return this._buildArgs(args, override, encoding, extra);\n }\n\n /**\n * @internal\n */\n _wsOnSignatureNotification(notification: Object) {\n const {result, subscription} = create(\n notification,\n SignatureNotificationResult,\n );\n if (result.value !== 'receivedSignature') {\n /**\n * Special case.\n * After a signature is processed, RPCs automatically dispose of the\n * subscription on the server side. We need to track which of these\n * subscriptions have been disposed in such a way, so that we know\n * whether the client is dealing with a not-yet-processed signature\n * (in which case we must tear down the server subscription) or an\n * already-processed signature (in which case the client can simply\n * clear out the subscription locally without telling the server).\n *\n * NOTE: There is a proposal to eliminate this special case, here:\n * https://github.com/solana-labs/solana/issues/18892\n */\n this._subscriptionsAutoDisposedByRpc.add(subscription);\n }\n this._handleServerNotification(\n subscription,\n result.value === 'receivedSignature'\n ? [{type: 'received'}, result.context]\n : [{type: 'status', result: result.value}, result.context],\n );\n }\n\n /**\n * Register a callback to be invoked upon signature updates\n *\n * @param signature Transaction signature string in base 58\n * @param callback Function to invoke on signature notifications\n * @param commitment Specify the commitment level signature must reach before notification\n * @return subscription id\n */\n onSignature(\n signature: TransactionSignature,\n callback: SignatureResultCallback,\n commitment?: Commitment,\n ): ClientSubscriptionId {\n const args = this._buildArgs(\n [signature],\n commitment || this._commitment || 'finalized', // Apply connection/server default.\n );\n const clientSubscriptionId = this._makeSubscription(\n {\n callback: (notification, context) => {\n if (notification.type === 'status') {\n callback(notification.result, context);\n // Signatures subscriptions are auto-removed by the RPC service\n // so no need to explicitly send an unsubscribe message.\n try {\n this.removeSignatureListener(clientSubscriptionId);\n // eslint-disable-next-line no-empty\n } catch (_err) {\n // Already removed.\n }\n }\n },\n method: 'signatureSubscribe',\n unsubscribeMethod: 'signatureUnsubscribe',\n },\n args,\n );\n return clientSubscriptionId;\n }\n\n /**\n * Register a callback to be invoked when a transaction is\n * received and/or processed.\n *\n * @param signature Transaction signature string in base 58\n * @param callback Function to invoke on signature notifications\n * @param options Enable received notifications and set the commitment\n * level that signature must reach before notification\n * @return subscription id\n */\n onSignatureWithOptions(\n signature: TransactionSignature,\n callback: SignatureSubscriptionCallback,\n options?: SignatureSubscriptionOptions,\n ): ClientSubscriptionId {\n const {commitment, ...extra} = {\n ...options,\n commitment:\n (options && options.commitment) || this._commitment || 'finalized', // Apply connection/server default.\n };\n const args = this._buildArgs(\n [signature],\n commitment,\n undefined /* encoding */,\n extra,\n );\n const clientSubscriptionId = this._makeSubscription(\n {\n callback: (notification, context) => {\n callback(notification, context);\n // Signatures subscriptions are auto-removed by the RPC service\n // so no need to explicitly send an unsubscribe message.\n try {\n this.removeSignatureListener(clientSubscriptionId);\n // eslint-disable-next-line no-empty\n } catch (_err) {\n // Already removed.\n }\n },\n method: 'signatureSubscribe',\n unsubscribeMethod: 'signatureUnsubscribe',\n },\n args,\n );\n return clientSubscriptionId;\n }\n\n /**\n * Deregister a signature notification callback\n *\n * @param clientSubscriptionId client subscription id to deregister\n */\n async removeSignatureListener(\n clientSubscriptionId: ClientSubscriptionId,\n ): Promise {\n await this._unsubscribeClientSubscription(\n clientSubscriptionId,\n 'signature result',\n );\n }\n\n /**\n * @internal\n */\n _wsOnRootNotification(notification: Object) {\n const {result, subscription} = create(notification, RootNotificationResult);\n this._handleServerNotification(subscription, [result]);\n }\n\n /**\n * Register a callback to be invoked upon root changes\n *\n * @param callback Function to invoke whenever the root changes\n * @return subscription id\n */\n onRootChange(callback: RootChangeCallback): ClientSubscriptionId {\n return this._makeSubscription(\n {\n callback,\n method: 'rootSubscribe',\n unsubscribeMethod: 'rootUnsubscribe',\n },\n [] /* args */,\n );\n }\n\n /**\n * Deregister a root notification callback\n *\n * @param clientSubscriptionId client subscription id to deregister\n */\n async removeRootChangeListener(\n clientSubscriptionId: ClientSubscriptionId,\n ): Promise {\n await this._unsubscribeClientSubscription(\n clientSubscriptionId,\n 'root change',\n );\n }\n}\n","import {generateKeypair, getPublicKey, Ed25519Keypair} from './utils/ed25519';\nimport {PublicKey} from './publickey';\n\n/**\n * Keypair signer interface\n */\nexport interface Signer {\n publicKey: PublicKey;\n secretKey: Uint8Array;\n}\n\n/**\n * An account keypair used for signing transactions.\n */\nexport class Keypair {\n private _keypair: Ed25519Keypair;\n\n /**\n * Create a new keypair instance.\n * Generate random keypair if no {@link Ed25519Keypair} is provided.\n *\n * @param {Ed25519Keypair} keypair ed25519 keypair\n */\n constructor(keypair?: Ed25519Keypair) {\n this._keypair = keypair ?? generateKeypair();\n }\n\n /**\n * Generate a new random keypair\n *\n * @returns {Keypair} Keypair\n */\n static generate(): Keypair {\n return new Keypair(generateKeypair());\n }\n\n /**\n * Create a keypair from a raw secret key byte array.\n *\n * This method should only be used to recreate a keypair from a previously\n * generated secret key. Generating keypairs from a random seed should be done\n * with the {@link Keypair.fromSeed} method.\n *\n * @throws error if the provided secret key is invalid and validation is not skipped.\n *\n * @param secretKey secret key byte array\n * @param options skip secret key validation\n *\n * @returns {Keypair} Keypair\n */\n static fromSecretKey(\n secretKey: Uint8Array,\n options?: {skipValidation?: boolean},\n ): Keypair {\n if (secretKey.byteLength !== 64) {\n throw new Error('bad secret key size');\n }\n const publicKey = secretKey.slice(32, 64);\n if (!options || !options.skipValidation) {\n const privateScalar = secretKey.slice(0, 32);\n const computedPublicKey = getPublicKey(privateScalar);\n for (let ii = 0; ii < 32; ii++) {\n if (publicKey[ii] !== computedPublicKey[ii]) {\n throw new Error('provided secretKey is invalid');\n }\n }\n }\n return new Keypair({publicKey, secretKey});\n }\n\n /**\n * Generate a keypair from a 32 byte seed.\n *\n * @param seed seed byte array\n *\n * @returns {Keypair} Keypair\n */\n static fromSeed(seed: Uint8Array): Keypair {\n const publicKey = getPublicKey(seed);\n const secretKey = new Uint8Array(64);\n secretKey.set(seed);\n secretKey.set(publicKey, 32);\n return new Keypair({publicKey, secretKey});\n }\n\n /**\n * The public key for this keypair\n *\n * @returns {PublicKey} PublicKey\n */\n get publicKey(): PublicKey {\n return new PublicKey(this._keypair.publicKey);\n }\n\n /**\n * The raw secret key for this keypair\n * @returns {Uint8Array} Secret key in an array of Uint8 bytes\n */\n get secretKey(): Uint8Array {\n return new Uint8Array(this._keypair.secretKey);\n }\n}\n","import * as BufferLayout from '@solana/buffer-layout';\nimport {getU64Encoder} from '@solana/codecs-numbers';\n\nimport * as Layout from '../../layout';\nimport {PublicKey} from '../../publickey';\nimport * as bigintLayout from '../../utils/bigint';\nimport {SystemProgram} from '../system';\nimport {TransactionInstruction} from '../../transaction';\nimport {decodeData, encodeData, IInstructionInputData} from '../../instruction';\n\nexport * from './state';\n\nexport type CreateLookupTableParams = {\n /** Account used to derive and control the new address lookup table. */\n authority: PublicKey;\n /** Account that will fund the new address lookup table. */\n payer: PublicKey;\n /** A recent slot must be used in the derivation path for each initialized table. */\n recentSlot: bigint | number;\n};\n\nexport type FreezeLookupTableParams = {\n /** Address lookup table account to freeze. */\n lookupTable: PublicKey;\n /** Account which is the current authority. */\n authority: PublicKey;\n};\n\nexport type ExtendLookupTableParams = {\n /** Address lookup table account to extend. */\n lookupTable: PublicKey;\n /** Account which is the current authority. */\n authority: PublicKey;\n /** Account that will fund the table reallocation.\n * Not required if the reallocation has already been funded. */\n payer?: PublicKey;\n /** List of Public Keys to be added to the lookup table. */\n addresses: Array;\n};\n\nexport type DeactivateLookupTableParams = {\n /** Address lookup table account to deactivate. */\n lookupTable: PublicKey;\n /** Account which is the current authority. */\n authority: PublicKey;\n};\n\nexport type CloseLookupTableParams = {\n /** Address lookup table account to close. */\n lookupTable: PublicKey;\n /** Account which is the current authority. */\n authority: PublicKey;\n /** Recipient of closed account lamports. */\n recipient: PublicKey;\n};\n\n/**\n * An enumeration of valid LookupTableInstructionType's\n */\nexport type LookupTableInstructionType =\n | 'CreateLookupTable'\n | 'ExtendLookupTable'\n | 'CloseLookupTable'\n | 'FreezeLookupTable'\n | 'DeactivateLookupTable';\n\ntype LookupTableInstructionInputData = {\n CreateLookupTable: IInstructionInputData &\n Readonly<{\n recentSlot: bigint;\n bumpSeed: number;\n }>;\n FreezeLookupTable: IInstructionInputData;\n ExtendLookupTable: IInstructionInputData &\n Readonly<{\n numberOfAddresses: bigint;\n addresses: Array;\n }>;\n DeactivateLookupTable: IInstructionInputData;\n CloseLookupTable: IInstructionInputData;\n};\n\n/**\n * An enumeration of valid address lookup table InstructionType's\n * @internal\n */\nexport const LOOKUP_TABLE_INSTRUCTION_LAYOUTS = Object.freeze({\n CreateLookupTable: {\n index: 0,\n layout: BufferLayout.struct<\n LookupTableInstructionInputData['CreateLookupTable']\n >([\n BufferLayout.u32('instruction'),\n bigintLayout.u64('recentSlot'),\n BufferLayout.u8('bumpSeed'),\n ]),\n },\n FreezeLookupTable: {\n index: 1,\n layout: BufferLayout.struct<\n LookupTableInstructionInputData['FreezeLookupTable']\n >([BufferLayout.u32('instruction')]),\n },\n ExtendLookupTable: {\n index: 2,\n layout: BufferLayout.struct<\n LookupTableInstructionInputData['ExtendLookupTable']\n >([\n BufferLayout.u32('instruction'),\n bigintLayout.u64(),\n BufferLayout.seq(\n Layout.publicKey(),\n BufferLayout.offset(BufferLayout.u32(), -8),\n 'addresses',\n ),\n ]),\n },\n DeactivateLookupTable: {\n index: 3,\n layout: BufferLayout.struct<\n LookupTableInstructionInputData['DeactivateLookupTable']\n >([BufferLayout.u32('instruction')]),\n },\n CloseLookupTable: {\n index: 4,\n layout: BufferLayout.struct<\n LookupTableInstructionInputData['CloseLookupTable']\n >([BufferLayout.u32('instruction')]),\n },\n});\n\nexport class AddressLookupTableInstruction {\n /**\n * @internal\n */\n constructor() {}\n\n static decodeInstructionType(\n instruction: TransactionInstruction,\n ): LookupTableInstructionType {\n this.checkProgramId(instruction.programId);\n\n const instructionTypeLayout = BufferLayout.u32('instruction');\n const index = instructionTypeLayout.decode(instruction.data);\n\n let type: LookupTableInstructionType | undefined;\n for (const [layoutType, layout] of Object.entries(\n LOOKUP_TABLE_INSTRUCTION_LAYOUTS,\n )) {\n if ((layout as any).index == index) {\n type = layoutType as LookupTableInstructionType;\n break;\n }\n }\n if (!type) {\n throw new Error(\n 'Invalid Instruction. Should be a LookupTable Instruction',\n );\n }\n return type;\n }\n\n static decodeCreateLookupTable(\n instruction: TransactionInstruction,\n ): CreateLookupTableParams {\n this.checkProgramId(instruction.programId);\n this.checkKeysLength(instruction.keys, 4);\n\n const {recentSlot} = decodeData(\n LOOKUP_TABLE_INSTRUCTION_LAYOUTS.CreateLookupTable,\n instruction.data,\n );\n\n return {\n authority: instruction.keys[1].pubkey,\n payer: instruction.keys[2].pubkey,\n recentSlot: Number(recentSlot),\n };\n }\n\n static decodeExtendLookupTable(\n instruction: TransactionInstruction,\n ): ExtendLookupTableParams {\n this.checkProgramId(instruction.programId);\n if (instruction.keys.length < 2) {\n throw new Error(\n `invalid instruction; found ${instruction.keys.length} keys, expected at least 2`,\n );\n }\n\n const {addresses} = decodeData(\n LOOKUP_TABLE_INSTRUCTION_LAYOUTS.ExtendLookupTable,\n instruction.data,\n );\n return {\n lookupTable: instruction.keys[0].pubkey,\n authority: instruction.keys[1].pubkey,\n payer:\n instruction.keys.length > 2 ? instruction.keys[2].pubkey : undefined,\n addresses: addresses.map(buffer => new PublicKey(buffer)),\n };\n }\n\n static decodeCloseLookupTable(\n instruction: TransactionInstruction,\n ): CloseLookupTableParams {\n this.checkProgramId(instruction.programId);\n this.checkKeysLength(instruction.keys, 3);\n\n return {\n lookupTable: instruction.keys[0].pubkey,\n authority: instruction.keys[1].pubkey,\n recipient: instruction.keys[2].pubkey,\n };\n }\n\n static decodeFreezeLookupTable(\n instruction: TransactionInstruction,\n ): FreezeLookupTableParams {\n this.checkProgramId(instruction.programId);\n this.checkKeysLength(instruction.keys, 2);\n\n return {\n lookupTable: instruction.keys[0].pubkey,\n authority: instruction.keys[1].pubkey,\n };\n }\n\n static decodeDeactivateLookupTable(\n instruction: TransactionInstruction,\n ): DeactivateLookupTableParams {\n this.checkProgramId(instruction.programId);\n this.checkKeysLength(instruction.keys, 2);\n\n return {\n lookupTable: instruction.keys[0].pubkey,\n authority: instruction.keys[1].pubkey,\n };\n }\n\n /**\n * @internal\n */\n static checkProgramId(programId: PublicKey) {\n if (!programId.equals(AddressLookupTableProgram.programId)) {\n throw new Error(\n 'invalid instruction; programId is not AddressLookupTable Program',\n );\n }\n }\n /**\n * @internal\n */\n static checkKeysLength(keys: Array, expectedLength: number) {\n if (keys.length < expectedLength) {\n throw new Error(\n `invalid instruction; found ${keys.length} keys, expected at least ${expectedLength}`,\n );\n }\n }\n}\n\nexport class AddressLookupTableProgram {\n /**\n * @internal\n */\n constructor() {}\n\n static programId: PublicKey = new PublicKey(\n 'AddressLookupTab1e1111111111111111111111111',\n );\n\n static createLookupTable(params: CreateLookupTableParams) {\n const [lookupTableAddress, bumpSeed] = PublicKey.findProgramAddressSync(\n [\n params.authority.toBuffer(),\n getU64Encoder().encode(params.recentSlot) as Uint8Array,\n ],\n this.programId,\n );\n\n const type = LOOKUP_TABLE_INSTRUCTION_LAYOUTS.CreateLookupTable;\n const data = encodeData(type, {\n recentSlot: BigInt(params.recentSlot),\n bumpSeed: bumpSeed,\n });\n\n const keys = [\n {\n pubkey: lookupTableAddress,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: params.authority,\n isSigner: true,\n isWritable: false,\n },\n {\n pubkey: params.payer,\n isSigner: true,\n isWritable: true,\n },\n {\n pubkey: SystemProgram.programId,\n isSigner: false,\n isWritable: false,\n },\n ];\n\n return [\n new TransactionInstruction({\n programId: this.programId,\n keys: keys,\n data: data,\n }),\n lookupTableAddress,\n ] as [TransactionInstruction, PublicKey];\n }\n\n static freezeLookupTable(params: FreezeLookupTableParams) {\n const type = LOOKUP_TABLE_INSTRUCTION_LAYOUTS.FreezeLookupTable;\n const data = encodeData(type);\n\n const keys = [\n {\n pubkey: params.lookupTable,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: params.authority,\n isSigner: true,\n isWritable: false,\n },\n ];\n\n return new TransactionInstruction({\n programId: this.programId,\n keys: keys,\n data: data,\n });\n }\n\n static extendLookupTable(params: ExtendLookupTableParams) {\n const type = LOOKUP_TABLE_INSTRUCTION_LAYOUTS.ExtendLookupTable;\n const data = encodeData(type, {\n addresses: params.addresses.map(addr => addr.toBytes()),\n });\n\n const keys = [\n {\n pubkey: params.lookupTable,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: params.authority,\n isSigner: true,\n isWritable: false,\n },\n ];\n\n if (params.payer) {\n keys.push(\n {\n pubkey: params.payer,\n isSigner: true,\n isWritable: true,\n },\n {\n pubkey: SystemProgram.programId,\n isSigner: false,\n isWritable: false,\n },\n );\n }\n\n return new TransactionInstruction({\n programId: this.programId,\n keys: keys,\n data: data,\n });\n }\n\n static deactivateLookupTable(params: DeactivateLookupTableParams) {\n const type = LOOKUP_TABLE_INSTRUCTION_LAYOUTS.DeactivateLookupTable;\n const data = encodeData(type);\n\n const keys = [\n {\n pubkey: params.lookupTable,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: params.authority,\n isSigner: true,\n isWritable: false,\n },\n ];\n\n return new TransactionInstruction({\n programId: this.programId,\n keys: keys,\n data: data,\n });\n }\n\n static closeLookupTable(params: CloseLookupTableParams) {\n const type = LOOKUP_TABLE_INSTRUCTION_LAYOUTS.CloseLookupTable;\n const data = encodeData(type);\n\n const keys = [\n {\n pubkey: params.lookupTable,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: params.authority,\n isSigner: true,\n isWritable: false,\n },\n {\n pubkey: params.recipient,\n isSigner: false,\n isWritable: true,\n },\n ];\n\n return new TransactionInstruction({\n programId: this.programId,\n keys: keys,\n data: data,\n });\n }\n}\n","import * as BufferLayout from '@solana/buffer-layout';\n\nimport {\n encodeData,\n decodeData,\n InstructionType,\n IInstructionInputData,\n} from '../instruction';\nimport {PublicKey} from '../publickey';\nimport {TransactionInstruction} from '../transaction';\nimport {u64} from '../utils/bigint';\n\n/**\n * Compute Budget Instruction class\n */\nexport class ComputeBudgetInstruction {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Decode a compute budget instruction and retrieve the instruction type.\n */\n static decodeInstructionType(\n instruction: TransactionInstruction,\n ): ComputeBudgetInstructionType {\n this.checkProgramId(instruction.programId);\n\n const instructionTypeLayout = BufferLayout.u8('instruction');\n const typeIndex = instructionTypeLayout.decode(instruction.data);\n\n let type: ComputeBudgetInstructionType | undefined;\n for (const [ixType, layout] of Object.entries(\n COMPUTE_BUDGET_INSTRUCTION_LAYOUTS,\n )) {\n if (layout.index == typeIndex) {\n type = ixType as ComputeBudgetInstructionType;\n break;\n }\n }\n\n if (!type) {\n throw new Error(\n 'Instruction type incorrect; not a ComputeBudgetInstruction',\n );\n }\n\n return type;\n }\n\n /**\n * Decode request units compute budget instruction and retrieve the instruction params.\n */\n static decodeRequestUnits(\n instruction: TransactionInstruction,\n ): RequestUnitsParams {\n this.checkProgramId(instruction.programId);\n const {units, additionalFee} = decodeData(\n COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.RequestUnits,\n instruction.data,\n );\n return {units, additionalFee};\n }\n\n /**\n * Decode request heap frame compute budget instruction and retrieve the instruction params.\n */\n static decodeRequestHeapFrame(\n instruction: TransactionInstruction,\n ): RequestHeapFrameParams {\n this.checkProgramId(instruction.programId);\n const {bytes} = decodeData(\n COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.RequestHeapFrame,\n instruction.data,\n );\n return {bytes};\n }\n\n /**\n * Decode set compute unit limit compute budget instruction and retrieve the instruction params.\n */\n static decodeSetComputeUnitLimit(\n instruction: TransactionInstruction,\n ): SetComputeUnitLimitParams {\n this.checkProgramId(instruction.programId);\n const {units} = decodeData(\n COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.SetComputeUnitLimit,\n instruction.data,\n );\n return {units};\n }\n\n /**\n * Decode set compute unit price compute budget instruction and retrieve the instruction params.\n */\n static decodeSetComputeUnitPrice(\n instruction: TransactionInstruction,\n ): SetComputeUnitPriceParams {\n this.checkProgramId(instruction.programId);\n const {microLamports} = decodeData(\n COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.SetComputeUnitPrice,\n instruction.data,\n );\n return {microLamports};\n }\n\n /**\n * @internal\n */\n static checkProgramId(programId: PublicKey) {\n if (!programId.equals(ComputeBudgetProgram.programId)) {\n throw new Error(\n 'invalid instruction; programId is not ComputeBudgetProgram',\n );\n }\n }\n}\n\n/**\n * An enumeration of valid ComputeBudgetInstructionType's\n */\nexport type ComputeBudgetInstructionType =\n // FIXME\n // It would be preferable for this type to be `keyof ComputeBudgetInstructionInputData`\n // but Typedoc does not transpile `keyof` expressions.\n // See https://github.com/TypeStrong/typedoc/issues/1894\n | 'RequestUnits'\n | 'RequestHeapFrame'\n | 'SetComputeUnitLimit'\n | 'SetComputeUnitPrice';\n\ntype ComputeBudgetInstructionInputData = {\n RequestUnits: IInstructionInputData & Readonly;\n RequestHeapFrame: IInstructionInputData & Readonly;\n SetComputeUnitLimit: IInstructionInputData &\n Readonly;\n SetComputeUnitPrice: IInstructionInputData &\n Readonly;\n};\n\n/**\n * Request units instruction params\n */\nexport interface RequestUnitsParams {\n /** Units to request for transaction-wide compute */\n units: number;\n /** Prioritization fee lamports */\n additionalFee: number;\n}\n\n/**\n * Request heap frame instruction params\n */\nexport type RequestHeapFrameParams = {\n /** Requested transaction-wide program heap size in bytes. Must be multiple of 1024. Applies to each program, including CPIs. */\n bytes: number;\n};\n\n/**\n * Set compute unit limit instruction params\n */\nexport interface SetComputeUnitLimitParams {\n /** Transaction-wide compute unit limit */\n units: number;\n}\n\n/**\n * Set compute unit price instruction params\n */\nexport interface SetComputeUnitPriceParams {\n /** Transaction compute unit price used for prioritization fees */\n microLamports: number | bigint;\n}\n\n/**\n * An enumeration of valid ComputeBudget InstructionType's\n * @internal\n */\nexport const COMPUTE_BUDGET_INSTRUCTION_LAYOUTS = Object.freeze<{\n [Instruction in ComputeBudgetInstructionType]: InstructionType<\n ComputeBudgetInstructionInputData[Instruction]\n >;\n}>({\n RequestUnits: {\n index: 0,\n layout: BufferLayout.struct<\n ComputeBudgetInstructionInputData['RequestUnits']\n >([\n BufferLayout.u8('instruction'),\n BufferLayout.u32('units'),\n BufferLayout.u32('additionalFee'),\n ]),\n },\n RequestHeapFrame: {\n index: 1,\n layout: BufferLayout.struct<\n ComputeBudgetInstructionInputData['RequestHeapFrame']\n >([BufferLayout.u8('instruction'), BufferLayout.u32('bytes')]),\n },\n SetComputeUnitLimit: {\n index: 2,\n layout: BufferLayout.struct<\n ComputeBudgetInstructionInputData['SetComputeUnitLimit']\n >([BufferLayout.u8('instruction'), BufferLayout.u32('units')]),\n },\n SetComputeUnitPrice: {\n index: 3,\n layout: BufferLayout.struct<\n ComputeBudgetInstructionInputData['SetComputeUnitPrice']\n >([BufferLayout.u8('instruction'), u64('microLamports')]),\n },\n});\n\n/**\n * Factory class for transaction instructions to interact with the Compute Budget program\n */\nexport class ComputeBudgetProgram {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Public key that identifies the Compute Budget program\n */\n static programId: PublicKey = new PublicKey(\n 'ComputeBudget111111111111111111111111111111',\n );\n\n /**\n * @deprecated Instead, call {@link setComputeUnitLimit} and/or {@link setComputeUnitPrice}\n */\n static requestUnits(params: RequestUnitsParams): TransactionInstruction {\n const type = COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.RequestUnits;\n const data = encodeData(type, params);\n return new TransactionInstruction({\n keys: [],\n programId: this.programId,\n data,\n });\n }\n\n static requestHeapFrame(\n params: RequestHeapFrameParams,\n ): TransactionInstruction {\n const type = COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.RequestHeapFrame;\n const data = encodeData(type, params);\n return new TransactionInstruction({\n keys: [],\n programId: this.programId,\n data,\n });\n }\n\n static setComputeUnitLimit(\n params: SetComputeUnitLimitParams,\n ): TransactionInstruction {\n const type = COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.SetComputeUnitLimit;\n const data = encodeData(type, params);\n return new TransactionInstruction({\n keys: [],\n programId: this.programId,\n data,\n });\n }\n\n static setComputeUnitPrice(\n params: SetComputeUnitPriceParams,\n ): TransactionInstruction {\n const type = COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.SetComputeUnitPrice;\n const data = encodeData(type, {\n microLamports: BigInt(params.microLamports),\n });\n return new TransactionInstruction({\n keys: [],\n programId: this.programId,\n data,\n });\n }\n}\n","import {Buffer} from 'buffer';\nimport * as BufferLayout from '@solana/buffer-layout';\n\nimport {Keypair} from '../keypair';\nimport {PublicKey} from '../publickey';\nimport {TransactionInstruction} from '../transaction';\nimport assert from '../utils/assert';\nimport {sign} from '../utils/ed25519';\n\nconst PRIVATE_KEY_BYTES = 64;\nconst PUBLIC_KEY_BYTES = 32;\nconst SIGNATURE_BYTES = 64;\n\n/**\n * Params for creating an ed25519 instruction using a public key\n */\nexport type CreateEd25519InstructionWithPublicKeyParams = {\n publicKey: Uint8Array;\n message: Uint8Array;\n signature: Uint8Array;\n instructionIndex?: number;\n};\n\n/**\n * Params for creating an ed25519 instruction using a private key\n */\nexport type CreateEd25519InstructionWithPrivateKeyParams = {\n privateKey: Uint8Array;\n message: Uint8Array;\n instructionIndex?: number;\n};\n\nconst ED25519_INSTRUCTION_LAYOUT = BufferLayout.struct<\n Readonly<{\n messageDataOffset: number;\n messageDataSize: number;\n messageInstructionIndex: number;\n numSignatures: number;\n padding: number;\n publicKeyInstructionIndex: number;\n publicKeyOffset: number;\n signatureInstructionIndex: number;\n signatureOffset: number;\n }>\n>([\n BufferLayout.u8('numSignatures'),\n BufferLayout.u8('padding'),\n BufferLayout.u16('signatureOffset'),\n BufferLayout.u16('signatureInstructionIndex'),\n BufferLayout.u16('publicKeyOffset'),\n BufferLayout.u16('publicKeyInstructionIndex'),\n BufferLayout.u16('messageDataOffset'),\n BufferLayout.u16('messageDataSize'),\n BufferLayout.u16('messageInstructionIndex'),\n]);\n\nexport class Ed25519Program {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Public key that identifies the ed25519 program\n */\n static programId: PublicKey = new PublicKey(\n 'Ed25519SigVerify111111111111111111111111111',\n );\n\n /**\n * Create an ed25519 instruction with a public key and signature. The\n * public key must be a buffer that is 32 bytes long, and the signature\n * must be a buffer of 64 bytes.\n */\n static createInstructionWithPublicKey(\n params: CreateEd25519InstructionWithPublicKeyParams,\n ): TransactionInstruction {\n const {publicKey, message, signature, instructionIndex} = params;\n\n assert(\n publicKey.length === PUBLIC_KEY_BYTES,\n `Public Key must be ${PUBLIC_KEY_BYTES} bytes but received ${publicKey.length} bytes`,\n );\n\n assert(\n signature.length === SIGNATURE_BYTES,\n `Signature must be ${SIGNATURE_BYTES} bytes but received ${signature.length} bytes`,\n );\n\n const publicKeyOffset = ED25519_INSTRUCTION_LAYOUT.span;\n const signatureOffset = publicKeyOffset + publicKey.length;\n const messageDataOffset = signatureOffset + signature.length;\n const numSignatures = 1;\n\n const instructionData = Buffer.alloc(messageDataOffset + message.length);\n\n const index =\n instructionIndex == null\n ? 0xffff // An index of `u16::MAX` makes it default to the current instruction.\n : instructionIndex;\n\n ED25519_INSTRUCTION_LAYOUT.encode(\n {\n numSignatures,\n padding: 0,\n signatureOffset,\n signatureInstructionIndex: index,\n publicKeyOffset,\n publicKeyInstructionIndex: index,\n messageDataOffset,\n messageDataSize: message.length,\n messageInstructionIndex: index,\n },\n instructionData,\n );\n\n instructionData.fill(publicKey, publicKeyOffset);\n instructionData.fill(signature, signatureOffset);\n instructionData.fill(message, messageDataOffset);\n\n return new TransactionInstruction({\n keys: [],\n programId: Ed25519Program.programId,\n data: instructionData,\n });\n }\n\n /**\n * Create an ed25519 instruction with a private key. The private key\n * must be a buffer that is 64 bytes long.\n */\n static createInstructionWithPrivateKey(\n params: CreateEd25519InstructionWithPrivateKeyParams,\n ): TransactionInstruction {\n const {privateKey, message, instructionIndex} = params;\n\n assert(\n privateKey.length === PRIVATE_KEY_BYTES,\n `Private key must be ${PRIVATE_KEY_BYTES} bytes but received ${privateKey.length} bytes`,\n );\n\n try {\n const keypair = Keypair.fromSecretKey(privateKey);\n const publicKey = keypair.publicKey.toBytes();\n const signature = sign(message, keypair.secretKey);\n\n return this.createInstructionWithPublicKey({\n publicKey,\n message,\n signature,\n instructionIndex,\n });\n } catch (error) {\n throw new Error(`Error creating instruction; ${error}`);\n }\n }\n}\n","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// BigUint64Array is too slow as per 2024, so we implement it using Uint32Array.\n// TODO: re-check https://issues.chromium.org/issues/42212588\nfunction fromBig(n, le = false) {\n if (le)\n 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}\nfunction split(lst, 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}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\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.\nfunction add(Ah, Al, Bh, Bl) {\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, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };\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//# sourceMappingURL=_u64.js.map","import { abytes, aexists, anumber, aoutput } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapXOFConstructorWithOpts, isLE, byteSwap32, } from './utils.js';\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n// Various per round constants calculations\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ 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)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 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++)\n 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++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n 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}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n anumber(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 keccak() {\n if (!isLE)\n byteSwap32(this.state32);\n keccakP(this.state32, this.rounds);\n if (!isLE)\n byteSwap32(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists(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++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n 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)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(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)\n 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) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n 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) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (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}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ 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 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n//# sourceMappingURL=sha3.js.map","import { HashMD, Chi, Maj } from './_md.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per late 2024.\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state:\n// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n constructor() {\n super();\n this.A = 0xc1059ed8 | 0;\n this.B = 0x367cd507 | 0;\n this.C = 0x3070dd17 | 0;\n this.D = 0xf70e5939 | 0;\n this.E = 0xffc00b31 | 0;\n this.F = 0x68581511 | 0;\n this.G = 0x64f98fa7 | 0;\n this.H = 0xbefa4fa4 | 0;\n this.outputLen = 28;\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\n/**\n * SHA2-224 hash function\n */\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n//# sourceMappingURL=sha256.js.map","import { ahash, abytes, aexists } from './_assert.js';\nimport { Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n//# sourceMappingURL=hmac.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y² = x³ + ax + b\nimport { validateBasic, wNAF, pippenger, } from './curve.js';\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, memoized, abool } from './utils.js';\nfunction validateSigVerOpts(opts) {\n if (opts.lowS !== undefined)\n abool('lowS', opts.lowS);\n if (opts.prehash !== undefined)\n abool('prehash', opts.prehash);\n}\nfunction validatePointOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(opts, {\n a: 'field',\n b: 'field',\n }, {\n allowedPrivateKeyLengths: 'array',\n wrapPrivateKey: 'boolean',\n isTorsionFree: 'function',\n clearCofactor: 'function',\n allowInfinityPoint: 'boolean',\n fromBytes: 'function',\n toBytes: 'function',\n });\n const { endo, Fp, a } = opts;\n if (endo) {\n if (!Fp.eql(a, Fp.ZERO)) {\n throw new Error('invalid endomorphism, can only be defined for Koblitz curves that have a=0');\n }\n if (typeof endo !== 'object' ||\n typeof endo.beta !== 'bigint' ||\n typeof endo.splitScalar !== 'function') {\n throw new Error('invalid endomorphism, expected beta: bigint and splitScalar: function');\n }\n }\n return Object.freeze({ ...opts });\n}\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n * [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER = {\n // asn.1 DER encoding utils\n Err: class DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n },\n // Basic building block is TLV (Tag-Length-Value)\n _tlv: {\n encode: (tag, data) => {\n const { Err: E } = DER;\n if (tag < 0 || tag > 256)\n throw new E('tlv.encode: wrong tag');\n if (data.length & 1)\n throw new E('tlv.encode: unpadded data');\n const dataLen = data.length / 2;\n const len = ut.numberToHexUnpadded(dataLen);\n if ((len.length / 2) & 128)\n throw new E('tlv.encode: long form length too big');\n // length of length with long form flag\n const lenLen = dataLen > 127 ? ut.numberToHexUnpadded((len.length / 2) | 128) : '';\n const t = ut.numberToHexUnpadded(tag);\n return t + lenLen + len + data;\n },\n // v - value, l - left bytes (unparsed)\n decode(tag, data) {\n const { Err: E } = DER;\n let pos = 0;\n if (tag < 0 || tag > 256)\n throw new E('tlv.encode: wrong tag');\n if (data.length < 2 || data[pos++] !== tag)\n throw new E('tlv.decode: wrong tlv');\n const first = data[pos++];\n const isLong = !!(first & 128); // First bit of first length byte is flag for short/long form\n let length = 0;\n if (!isLong)\n length = first;\n else {\n // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n const lenLen = first & 127;\n if (!lenLen)\n throw new E('tlv.decode(long): indefinite length not supported');\n if (lenLen > 4)\n throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n const lengthBytes = data.subarray(pos, pos + lenLen);\n if (lengthBytes.length !== lenLen)\n throw new E('tlv.decode: length bytes not complete');\n if (lengthBytes[0] === 0)\n throw new E('tlv.decode(long): zero leftmost byte');\n for (const b of lengthBytes)\n length = (length << 8) | b;\n pos += lenLen;\n if (length < 128)\n throw new E('tlv.decode(long): not minimal encoding');\n }\n const v = data.subarray(pos, pos + length);\n if (v.length !== length)\n throw new E('tlv.decode: wrong value length');\n return { v, l: data.subarray(pos + length) };\n },\n },\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n _int: {\n encode(num) {\n const { Err: E } = DER;\n if (num < _0n)\n throw new E('integer: negative integers are not allowed');\n let hex = ut.numberToHexUnpadded(num);\n // Pad with zero byte if negative flag is present\n if (Number.parseInt(hex[0], 16) & 0b1000)\n hex = '00' + hex;\n if (hex.length & 1)\n throw new E('unexpected DER parsing assertion: unpadded hex');\n return hex;\n },\n decode(data) {\n const { Err: E } = DER;\n if (data[0] & 128)\n throw new E('invalid signature integer: negative');\n if (data[0] === 0x00 && !(data[1] & 128))\n throw new E('invalid signature integer: unnecessary leading zero');\n return b2n(data);\n },\n },\n toSig(hex) {\n // parse DER signature\n const { Err: E, _int: int, _tlv: tlv } = DER;\n const data = typeof hex === 'string' ? h2b(hex) : hex;\n ut.abytes(data);\n const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n if (seqLeftBytes.length)\n throw new E('invalid signature: left bytes after parsing');\n const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n if (sLeftBytes.length)\n throw new E('invalid signature: left bytes after parsing');\n return { r: int.decode(rBytes), s: int.decode(sBytes) };\n },\n hexFromSig(sig) {\n const { _tlv: tlv, _int: int } = DER;\n const rs = tlv.encode(0x02, int.encode(sig.r));\n const ss = tlv.encode(0x02, int.encode(sig.s));\n const seq = rs + ss;\n return tlv.encode(0x30, seq);\n },\n};\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\nexport function weierstrassPoints(opts) {\n const CURVE = validatePointOpts(opts);\n const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n const Fn = mod.Field(CURVE.n, CURVE.nBitLength);\n const toBytes = CURVE.toBytes ||\n ((_c, point, _isCompressed) => {\n const a = point.toAffine();\n return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n });\n const fromBytes = CURVE.fromBytes ||\n ((bytes) => {\n // const head = bytes[0];\n const tail = bytes.subarray(1);\n // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n });\n /**\n * y² = x³ + ax + b: Short weierstrass curve formula\n * @returns y²\n */\n function weierstrassEquation(x) {\n const { a, b } = CURVE;\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x2 * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n }\n // Validate whether the passed curve params are valid.\n // We check if curve equation works for generator point.\n // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n // ProjectivePoint class has not been initialized yet.\n if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n throw new Error('bad generator point: equation left != right');\n // Valid group elements reside in range 1..n-1\n function isWithinCurveOrder(num) {\n return ut.inRange(num, _1n, CURVE.n);\n }\n // Validates if priv key is valid and converts it to bigint.\n // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n function normPrivateKeyToScalar(key) {\n const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N } = CURVE;\n if (lengths && typeof key !== 'bigint') {\n if (ut.isBytes(key))\n key = ut.bytesToHex(key);\n // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n if (typeof key !== 'string' || !lengths.includes(key.length))\n throw new Error('invalid private key');\n key = key.padStart(nByteLength * 2, '0');\n }\n let num;\n try {\n num =\n typeof key === 'bigint'\n ? key\n : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n }\n catch (error) {\n throw new Error('invalid private key, expected hex or ' + nByteLength + ' bytes, got ' + typeof key);\n }\n if (wrapPrivateKey)\n num = mod.mod(num, N); // disabled by default, enabled for BLS\n ut.aInRange('private key', num, _1n, N); // num in range [1..N-1]\n return num;\n }\n function assertPrjPoint(other) {\n if (!(other instanceof Point))\n throw new Error('ProjectivePoint expected');\n }\n // Memoized toAffine / validity check. They are heavy. Points are immutable.\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (x, y, z) ∋ (x=x/z, y=y/z)\n const toAffineMemo = memoized((p, iz) => {\n const { px: x, py: y, pz: z } = p;\n // Fast-path for normalized points\n if (Fp.eql(z, Fp.ONE))\n return { x, y };\n const is0 = p.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null)\n iz = is0 ? Fp.ONE : Fp.inv(z);\n const ax = Fp.mul(x, iz);\n const ay = Fp.mul(y, iz);\n const zz = Fp.mul(z, iz);\n if (is0)\n return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE))\n throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n });\n // NOTE: on exception this will crash 'cached' and no value will be set.\n // Otherwise true will be return\n const assertValidMemo = memoized((p) => {\n if (p.is0()) {\n // (0, 1, 0) aka ZERO is invalid in most contexts.\n // In BLS, ZERO can be serialized, so we allow it.\n // (0, 0, 0) is invalid representation of ZERO.\n if (CURVE.allowInfinityPoint && !Fp.is0(p.py))\n return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = p.toAffine();\n // Check if x, y are valid field elements\n if (!Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('bad point: x or y not FE');\n const left = Fp.sqr(y); // y²\n const right = weierstrassEquation(x); // x³ + ax + b\n if (!Fp.eql(left, right))\n throw new Error('bad point: equation left != right');\n if (!p.isTorsionFree())\n throw new Error('bad point: not in prime-order subgroup');\n return true;\n });\n /**\n * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) ∋ (x=x/z, y=y/z)\n * Default Point works in 2d / affine coordinates: (x, y)\n * We're doing calculations in projective, because its operations don't require costly inversion.\n */\n class Point {\n constructor(px, py, pz) {\n this.px = px;\n this.py = py;\n this.pz = pz;\n if (px == null || !Fp.isValid(px))\n throw new Error('x required');\n if (py == null || !Fp.isValid(py))\n throw new Error('y required');\n if (pz == null || !Fp.isValid(pz))\n throw new Error('z required');\n Object.freeze(this);\n }\n // Does not validate if the point is on-curve.\n // Use fromHex instead, or call assertValidity() later.\n static fromAffine(p) {\n const { x, y } = p || {};\n if (!p || !Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('invalid affine point');\n if (p instanceof Point)\n throw new Error('projective point not allowed');\n const is0 = (i) => Fp.eql(i, Fp.ZERO);\n // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n if (is0(x) && is0(y))\n return Point.ZERO;\n return new Point(x, y, Fp.ONE);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\n static normalizeZ(points) {\n const toInv = Fp.invertBatch(points.map((p) => p.pz));\n return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n }\n /**\n * Converts hash string or Uint8Array to Point.\n * @param hex short/long ECDSA hex\n */\n static fromHex(hex) {\n const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n P.assertValidity();\n return P;\n }\n // Multiplies generator point by privateKey.\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n }\n // Multiscalar Multiplication\n static msm(points, scalars) {\n return pippenger(Point, Fn, points, scalars);\n }\n // \"Private method\", don't use it directly\n _setWindowSize(windowSize) {\n wnaf.setWindowSize(this, windowSize);\n }\n // A point on curve is valid if it conforms to equation.\n assertValidity() {\n assertValidMemo(this);\n }\n hasEvenY() {\n const { y } = this.toAffine();\n if (Fp.isOdd)\n return !Fp.isOdd(y);\n throw new Error(\"Field doesn't support isOdd\");\n }\n /**\n * Compare one point to another.\n */\n equals(other) {\n assertPrjPoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n /**\n * Flips point to one corresponding to (x, -y) in Affine coordinates.\n */\n negate() {\n return new Point(this.px, Fp.neg(this.py), this.pz);\n }\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, _3n);\n const { px: X1, py: Y1, pz: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other) {\n assertPrjPoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n wNAF(n) {\n return wnaf.wNAFCached(this, n, Point.normalizeZ);\n }\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(sc) {\n const { endo, n: N } = CURVE;\n ut.aInRange('scalar', sc, _0n, N);\n const I = Point.ZERO;\n if (sc === _0n)\n return I;\n if (this.is0() || sc === _1n)\n return this;\n // Case a: no endomorphism. Case b: has precomputes.\n if (!endo || wnaf.hasPrecomputes(this))\n return wnaf.wNAFCachedUnsafe(this, sc, Point.normalizeZ);\n // Case c: endomorphism\n let { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n let k1p = I;\n let k2p = I;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n return k1p.add(k2p);\n }\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(scalar) {\n const { endo, n: N } = CURVE;\n ut.aInRange('scalar', scalar, _1n, N);\n let point, fake; // Fake point is used to const-time mult\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n let { p: k1p, f: f1p } = this.wNAF(k1);\n let { p: k2p, f: f2p } = this.wNAF(k2);\n k1p = wnaf.constTimeNegate(k1neg, k1p);\n k2p = wnaf.constTimeNegate(k2neg, k2p);\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(scalar);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return Point.normalizeZ([point, fake])[0];\n }\n /**\n * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n * Not using Strauss-Shamir trick: precomputation tables are faster.\n * The trick could be useful if both P and Q are not G (not in our case).\n * @returns non-zero affine point\n */\n multiplyAndAddUnsafe(Q, a, b) {\n const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n const mul = (P, a // Select faster multiply() method\n ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n const sum = mul(this, a).add(mul(Q, b));\n return sum.is0() ? undefined : sum;\n }\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (x, y, z) ∋ (x=x/z, y=y/z)\n toAffine(iz) {\n return toAffineMemo(this, iz);\n }\n isTorsionFree() {\n const { h: cofactor, isTorsionFree } = CURVE;\n if (cofactor === _1n)\n return true; // No subgroups, always torsion-free\n if (isTorsionFree)\n return isTorsionFree(Point, this);\n throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n }\n clearCofactor() {\n const { h: cofactor, clearCofactor } = CURVE;\n if (cofactor === _1n)\n return this; // Fast-path\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(CURVE.h);\n }\n toRawBytes(isCompressed = true) {\n abool('isCompressed', isCompressed);\n this.assertValidity();\n return toBytes(Point, this, isCompressed);\n }\n toHex(isCompressed = true) {\n abool('isCompressed', isCompressed);\n return ut.bytesToHex(this.toRawBytes(isCompressed));\n }\n }\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n const _bits = CURVE.nBitLength;\n const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n // Validate if generator point is on curve\n return {\n CURVE,\n ProjectivePoint: Point,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n };\n}\nfunction validateOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(opts, {\n hash: 'hash',\n hmac: 'function',\n randomBytes: 'function',\n }, {\n bits2int: 'function',\n bits2int_modN: 'function',\n lowS: 'boolean',\n });\n return Object.freeze({ lowS: true, ...opts });\n}\n/**\n * Creates short weierstrass curve and ECDSA signature methods for it.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, b, p, n, Gx, Gy\n * const curve = weierstrass({ a, b, Fp: Field(p), n, Gx, Gy, h: 1n })\n */\nexport function weierstrass(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { Fp, n: CURVE_ORDER } = CURVE;\n const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n function modN(a) {\n return mod.mod(a, CURVE_ORDER);\n }\n function invN(a) {\n return mod.invert(a, CURVE_ORDER);\n }\n const { ProjectivePoint: Point, normPrivateKeyToScalar, weierstrassEquation, isWithinCurveOrder, } = weierstrassPoints({\n ...CURVE,\n toBytes(_c, point, isCompressed) {\n const a = point.toAffine();\n const x = Fp.toBytes(a.x);\n const cat = ut.concatBytes;\n abool('isCompressed', isCompressed);\n if (isCompressed) {\n return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n }\n else {\n return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n }\n },\n fromBytes(bytes) {\n const len = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // this.assertValidity() is done inside of fromHex\n if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n const x = ut.bytesToNumberBE(tail);\n if (!ut.inRange(x, _1n, Fp.ORDER))\n throw new Error('Point is not on curve');\n const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n let y;\n try {\n y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n }\n catch (sqrtError) {\n const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n throw new Error('Point is not on curve' + suffix);\n }\n const isYOdd = (y & _1n) === _1n;\n // ECDSA\n const isHeadOdd = (head & 1) === 1;\n if (isHeadOdd !== isYOdd)\n y = Fp.neg(y);\n return { x, y };\n }\n else if (len === uncompressedLen && head === 0x04) {\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n }\n else {\n const cl = compressedLen;\n const ul = uncompressedLen;\n throw new Error('invalid Point, expected length of ' + cl + ', or uncompressed ' + ul + ', got ' + len);\n }\n },\n });\n const numToNByteStr = (num) => ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n function normalizeS(s) {\n return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n }\n // slice bytes num\n const slcNum = (b, from, to) => ut.bytesToNumberBE(b.slice(from, to));\n /**\n * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n */\n class Signature {\n constructor(r, s, recovery) {\n this.r = r;\n this.s = s;\n this.recovery = recovery;\n this.assertValidity();\n }\n // pair (bytes of r, bytes of s)\n static fromCompact(hex) {\n const l = CURVE.nByteLength;\n hex = ensureBytes('compactSignature', hex, l * 2);\n return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n }\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(hex) {\n const { r, s } = DER.toSig(ensureBytes('DER', hex));\n return new Signature(r, s);\n }\n assertValidity() {\n ut.aInRange('r', this.r, _1n, CURVE_ORDER); // r in [1..N]\n ut.aInRange('s', this.s, _1n, CURVE_ORDER); // s in [1..N]\n }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n recoverPublicKey(msgHash) {\n const { r, s, recovery: rec } = this;\n const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n if (rec == null || ![0, 1, 2, 3].includes(rec))\n throw new Error('recovery id invalid');\n const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n if (radj >= Fp.ORDER)\n throw new Error('recovery id 2 or 3 invalid');\n const prefix = (rec & 1) === 0 ? '02' : '03';\n const R = Point.fromHex(prefix + numToNByteStr(radj));\n const ir = invN(radj); // r^-1\n const u1 = modN(-h * ir); // -hr^-1\n const u2 = modN(s * ir); // sr^-1\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n if (!Q)\n throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n Q.assertValidity();\n return Q;\n }\n // Signatures should be low-s, to prevent malleability.\n hasHighS() {\n return isBiggerThanHalfOrder(this.s);\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n }\n // DER-encoded\n toDERRawBytes() {\n return ut.hexToBytes(this.toDERHex());\n }\n toDERHex() {\n return DER.hexFromSig({ r: this.r, s: this.s });\n }\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return ut.hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numToNByteStr(this.r) + numToNByteStr(this.s);\n }\n }\n const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normPrivateKeyToScalar(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n normPrivateKeyToScalar: normPrivateKeyToScalar,\n /**\n * Produces cryptographically secure private key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n randomPrivateKey: () => {\n const length = mod.getMinHashLength(CURVE.n);\n return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n },\n /**\n * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n * Allows to massively speed-up `point.multiply(scalar)`.\n * @returns cached point\n * @example\n * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n * fast.multiply(privKey); // much faster ECDH now\n */\n precompute(windowSize = 8, point = Point.BASE) {\n point._setWindowSize(windowSize);\n point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n return point;\n },\n };\n /**\n * Computes public key for a private key. Checks for validity of the private key.\n * @param privateKey private key\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(privateKey, isCompressed = true) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n }\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item) {\n const arr = ut.isBytes(item);\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === compressedLen || len === uncompressedLen;\n if (str)\n return len === 2 * compressedLen || len === 2 * uncompressedLen;\n if (item instanceof Point)\n return true;\n return false;\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from private key and public key.\n * Checks: 1) private key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param privateA private key\n * @param publicB different public key\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(privateA, publicB, isCompressed = true) {\n if (isProbPub(privateA))\n throw new Error('first arg must be private key');\n if (!isProbPub(publicB))\n throw new Error('second arg must be public key');\n const b = Point.fromHex(publicB); // check for being on-curve\n return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n }\n // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n const bits2int = CURVE.bits2int ||\n function (bytes) {\n // Our custom check \"just in case\"\n if (bytes.length > 8192)\n throw new Error('input is too large');\n // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n // for some cases, since bytes.length * 8 is not actual bitLength.\n const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = CURVE.bits2int_modN ||\n function (bytes) {\n return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // NOTE: pads output with zero as per spec\n const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n /**\n * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n */\n function int2octets(num) {\n ut.aInRange('num < 2^' + CURVE.nBitLength, num, _0n, ORDER_MASK);\n // works with order, can have different size than numToField!\n return ut.numberToBytesBE(num, CURVE.nByteLength);\n }\n // Steps A, D of RFC6979 3.2\n // Creates RFC6979 seed; converts msg/privKey to numbers.\n // Used only in sign, not in verify.\n // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order,\n // this will be invalid at least for P521. Also it can be bigger for P224 + SHA256\n function prepSig(msgHash, privateKey, opts = defaultSigOpts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { hash, randomBytes } = CURVE;\n let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n if (lowS == null)\n lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n msgHash = ensureBytes('msgHash', msgHash);\n validateSigVerOpts(opts);\n if (prehash)\n msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n // We can't later call bits2octets, since nested bits2int is broken for curves\n // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(msgHash);\n const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (ent != null && ent !== false) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n }\n const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n // Converts signature params into point w r/s, checks result for validity.\n function k2sig(kBytes) {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n if (!isWithinCurveOrder(k))\n return; // Important: all mod() calls here must be done over N\n const ik = invN(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n const r = modN(q.x); // r = q.x mod n\n if (r === _0n)\n return;\n // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to\n // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n const s = modN(ik * modN(m + r * d)); // Not using blinding here\n if (s === _0n)\n return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = normalizeS(s); // if lowS was passed, ensure s is always\n recovery ^= 1; // // in the bottom half of N\n }\n return new Signature(r, normS, recovery); // use normS, not s\n }\n return { seed, k2sig };\n }\n const defaultSigOpts = { lowS: CURVE.lowS, prehash: false };\n const defaultVerOpts = { lowS: CURVE.lowS, prehash: false };\n /**\n * Signs message hash with a private key.\n * ```\n * sign(m, d, k) where\n * (x, y) = G × k\n * r = x mod n\n * s = (m + dr)/k mod n\n * ```\n * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n * @param privKey private key\n * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n * @returns signature with recovery param\n */\n function sign(msgHash, privKey, opts = defaultSigOpts) {\n const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n const C = CURVE;\n const drbg = ut.createHmacDrbg(C.hash.outputLen, C.nByteLength, C.hmac);\n return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n }\n // Enable precomputes. Slows down first publicKey computation by 20ms.\n Point.BASE._setWindowSize(8);\n // utils.precompute(8, ProjectivePoint.BASE)\n /**\n * Verifies a signature against message hash and public key.\n * Rejects lowS signatures by default: to override,\n * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n *\n * ```\n * verify(r, s, h, P) where\n * U1 = hs^-1 mod n\n * U2 = rs^-1 mod n\n * R = U1⋅G - U2⋅P\n * mod(R.x, n) == r\n * ```\n */\n function verify(signature, msgHash, publicKey, opts = defaultVerOpts) {\n const sg = signature;\n msgHash = ensureBytes('msgHash', msgHash);\n publicKey = ensureBytes('publicKey', publicKey);\n const { lowS, prehash, format } = opts;\n // Verify opts, deduce signature format\n validateSigVerOpts(opts);\n if ('strict' in opts)\n throw new Error('options.strict was renamed to lowS');\n if (format !== undefined && format !== 'compact' && format !== 'der')\n throw new Error('format must be compact or der');\n const isHex = typeof sg === 'string' || ut.isBytes(sg);\n const isObj = !isHex &&\n !format &&\n typeof sg === 'object' &&\n sg !== null &&\n typeof sg.r === 'bigint' &&\n typeof sg.s === 'bigint';\n if (!isHex && !isObj)\n throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n let _sig = undefined;\n let P;\n try {\n if (isObj)\n _sig = new Signature(sg.r, sg.s);\n if (isHex) {\n // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n // Since DER can also be 2*nByteLength bytes, we check for it first.\n try {\n if (format !== 'compact')\n _sig = Signature.fromDER(sg);\n }\n catch (derError) {\n if (!(derError instanceof DER.Err))\n throw derError;\n }\n if (!_sig && format !== 'der')\n _sig = Signature.fromCompact(sg);\n }\n P = Point.fromHex(publicKey);\n }\n catch (error) {\n return false;\n }\n if (!_sig)\n return false;\n if (lowS && _sig.hasHighS())\n return false;\n if (prehash)\n msgHash = CURVE.hash(msgHash);\n const { r, s } = _sig;\n const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n const is = invN(s); // s^-1\n const u1 = modN(h * is); // u1 = hs^-1 mod n\n const u2 = modN(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1⋅G + u2⋅P\n if (!R)\n return false;\n const v = modN(R.x);\n return v === r;\n }\n return {\n CURVE,\n getPublicKey,\n getSharedSecret,\n sign,\n verify,\n ProjectivePoint: Point,\n Signature,\n utils,\n };\n}\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio(Fp, Z) {\n // Generic implementation\n const q = Fp.ORDER;\n let l = _0n;\n for (let o = q - _1n; o % _2n === _0n; o /= _2n)\n l += _1n;\n const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n // 2n ** c1 == 2n << (c1-1)\n const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic\n const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic\n const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic\n const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic\n const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n let sqrtRatio = (u, v) => {\n let tv1 = c6; // 1. tv1 = c6\n let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n // 17. for i in (c1, c1 - 1, ..., 2):\n for (let i = c1; i > _1n; i--) {\n let tv5 = i - _2n; // 18. tv5 = i - 2\n tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5\n let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5\n const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1\n tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1\n tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1\n tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1)\n tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1)\n }\n return { isValid: isQR, value: tv3 };\n };\n if (Fp.ORDER % _4n === _3n) {\n // sqrt_ratio_3mod4(u, v)\n const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic\n const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n sqrtRatio = (u, v) => {\n let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n };\n }\n // No curves uses that\n // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU(Fp, opts) {\n mod.validateField(Fp);\n if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n if (!Fp.isOdd)\n throw new Error('Fp.isOdd is not implemented!');\n // Input: u, an element of F.\n // Output: (x, y), a point on E.\n return (u) => {\n // prettier-ignore\n let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, opts.Z); // 2. tv1 = Z * tv1\n tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2\n tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1\n tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1\n tv3 = Fp.mul(tv3, opts.B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, opts.A); // 8. tv4 = A * tv4\n tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2\n tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3\n const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1\n y = Fp.mul(y, value); // 20. y = y * y1\n x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square)\n y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square)\n const e1 = Fp.isOdd(u) === Fp.isOdd(y); // 23. e1 = sgn0(u) == sgn0(y)\n y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1)\n x = Fp.div(x, tv4); // 25. x = x / tv4\n return { x, y };\n };\n}\n//# sourceMappingURL=weierstrass.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { weierstrass } from './abstract/weierstrass.js';\n// connects noble-curves to noble-hashes\nexport function getHash(hash) {\n return {\n hash,\n hmac: (key, ...msgs) => hmac(hash, key, concatBytes(...msgs)),\n randomBytes,\n };\n}\nexport function createCurve(curveDef, defHash) {\n const create = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });\n return Object.freeze({ ...create(defHash), create });\n}\n//# sourceMappingURL=_shortw_utils.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { createCurve } from './_shortw_utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { inRange, aInRange, bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE, } from './abstract/utils.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a, b) => (a + b / _2n) / b;\n/**\n * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y) {\n const P = secp256k1P;\n // prettier-ignore\n const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n // prettier-ignore\n const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n const b2 = (y * y * y) % P; // x^3, 11\n const b3 = (b2 * b2 * y) % P; // x^7\n const b6 = (pow2(b3, _3n, P) * b3) % P;\n const b9 = (pow2(b6, _3n, P) * b3) % P;\n const b11 = (pow2(b9, _2n, P) * b2) % P;\n const b22 = (pow2(b11, _11n, P) * b11) % P;\n const b44 = (pow2(b22, _22n, P) * b22) % P;\n const b88 = (pow2(b44, _44n, P) * b44) % P;\n const b176 = (pow2(b88, _88n, P) * b88) % P;\n const b220 = (pow2(b176, _44n, P) * b44) % P;\n const b223 = (pow2(b220, _3n, P) * b3) % P;\n const t1 = (pow2(b223, _23n, P) * b22) % P;\n const t2 = (pow2(t1, _6n, P) * b2) % P;\n const root = pow2(t2, _2n, P);\n if (!Fpk1.eql(Fpk1.sqr(root), y))\n throw new Error('Cannot find square root');\n return root;\n}\nconst Fpk1 = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n/**\n * secp256k1 short weierstrass curve and ECDSA signatures over it.\n */\nexport const secp256k1 = createCurve({\n a: BigInt(0), // equation params: a, b\n b: BigInt(7), // Seem to be rigid: bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975\n Fp: Fpk1, // Field's prime: 2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n\n n: secp256k1N, // Curve order, total count of valid points in the field\n // Base point (x, y) aka generator point\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n h: BigInt(1), // Cofactor\n lowS: true, // Allow only low-S signatures by default in sign() and verify()\n /**\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n */\n endo: {\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar: (k) => {\n const n = secp256k1N;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalar: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n },\n}, sha256);\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES = {};\nfunction taggedHash(tag, ...messages) {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return sha256(concatBytes(tagP, ...messages));\n}\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n) => numberToBytesBE(n, 32);\nconst modP = (x) => mod(x, secp256k1P);\nconst modN = (x) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv) {\n let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = p.hasEvenY() ? d_ : modN(-d_);\n return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x) {\n aInRange('x', x, _1n, secp256k1P); // Fail if x ≥ p.\n const xx = modP(x * x);\n const c = modP(xx * x + BigInt(7)); // Let c = x³ + 7 mod p.\n let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n if (y % _2n !== _0n)\n y = modP(-y); // Return the unique point P such that x(P) = x and\n const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n p.assertValidity();\n return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args) {\n return modN(num(taggedHash('BIP0340/challenge', ...args)));\n}\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey) {\n return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G)\n}\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message, privateKey, auxRand = randomBytes(32)) {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = numTo32b(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n const k_ = modN(num(rand)); // Let k' = int(rand) mod n\n if (k_ === _0n)\n throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.\n const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n sig.set(rx, 0);\n sig.set(numTo32b(modN(k + e * d)), 32);\n // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n if (!schnorrVerify(sig, m, px))\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature, message, publicKey) {\n const sig = ensureBytes('signature', signature, 64);\n const m = ensureBytes('message', message);\n const pub = ensureBytes('publicKey', publicKey, 32);\n try {\n const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.\n if (!inRange(r, _1n, secp256k1P))\n return false;\n const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.\n if (!inRange(s, _1n, secp256k1N))\n return false;\n const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n const R = GmulAdd(P, s, modN(-e)); // R = s⋅G - e⋅P\n if (!R || !R.hasEvenY() || R.toAffine().x !== r)\n return false; // -eP == (n-e)P\n return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r.\n }\n catch (error) {\n return false;\n }\n}\n/**\n * Schnorr signatures over secp256k1.\n */\nexport const schnorr = /* @__PURE__ */ (() => ({\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n utils: {\n randomPrivateKey: secp256k1.utils.randomPrivateKey,\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n taggedHash,\n mod,\n },\n}))();\nconst isoMap = /* @__PURE__ */ (() => isogenyMap(Fpk1, [\n // xNum\n [\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n ],\n // xDen\n [\n '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n ],\n // yDen\n [\n '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n].map((i) => i.map((j) => BigInt(j)))))();\nconst mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fpk1, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fpk1.create(BigInt('-11')),\n}))();\nconst htf = /* @__PURE__ */ (() => createHasher(secp256k1.ProjectivePoint, (scalars) => {\n const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n return isoMap(x, y);\n}, {\n DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n p: Fpk1.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n}))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n//# sourceMappingURL=secp256k1.js.map","import {secp256k1} from '@noble/curves/secp256k1';\n\nexport const ecdsaSign = (\n msgHash: Parameters[0],\n privKey: Parameters[1],\n) => {\n const signature = secp256k1.sign(msgHash, privKey);\n return [signature.toCompactRawBytes(), signature.recovery!] as const;\n};\nexport const isValidPrivateKey = secp256k1.utils.isValidPrivateKey;\nexport const publicKeyCreate = secp256k1.getPublicKey;\n","import {Buffer} from 'buffer';\nimport * as BufferLayout from '@solana/buffer-layout';\nimport {keccak_256} from '@noble/hashes/sha3';\n\nimport {PublicKey} from '../publickey';\nimport {TransactionInstruction} from '../transaction';\nimport assert from '../utils/assert';\nimport {publicKeyCreate, ecdsaSign} from '../utils/secp256k1';\nimport {toBuffer} from '../utils/to-buffer';\n\nconst PRIVATE_KEY_BYTES = 32;\nconst ETHEREUM_ADDRESS_BYTES = 20;\nconst PUBLIC_KEY_BYTES = 64;\nconst SIGNATURE_OFFSETS_SERIALIZED_SIZE = 11;\n\n/**\n * Params for creating an secp256k1 instruction using a public key\n */\nexport type CreateSecp256k1InstructionWithPublicKeyParams = {\n publicKey: Buffer | Uint8Array | Array;\n message: Buffer | Uint8Array | Array;\n signature: Buffer | Uint8Array | Array;\n recoveryId: number;\n instructionIndex?: number;\n};\n\n/**\n * Params for creating an secp256k1 instruction using an Ethereum address\n */\nexport type CreateSecp256k1InstructionWithEthAddressParams = {\n ethAddress: Buffer | Uint8Array | Array | string;\n message: Buffer | Uint8Array | Array;\n signature: Buffer | Uint8Array | Array;\n recoveryId: number;\n instructionIndex?: number;\n};\n\n/**\n * Params for creating an secp256k1 instruction using a private key\n */\nexport type CreateSecp256k1InstructionWithPrivateKeyParams = {\n privateKey: Buffer | Uint8Array | Array;\n message: Buffer | Uint8Array | Array;\n instructionIndex?: number;\n};\n\nconst SECP256K1_INSTRUCTION_LAYOUT = BufferLayout.struct<\n Readonly<{\n ethAddress: Uint8Array;\n ethAddressInstructionIndex: number;\n ethAddressOffset: number;\n messageDataOffset: number;\n messageDataSize: number;\n messageInstructionIndex: number;\n numSignatures: number;\n recoveryId: number;\n signature: Uint8Array;\n signatureInstructionIndex: number;\n signatureOffset: number;\n }>\n>([\n BufferLayout.u8('numSignatures'),\n BufferLayout.u16('signatureOffset'),\n BufferLayout.u8('signatureInstructionIndex'),\n BufferLayout.u16('ethAddressOffset'),\n BufferLayout.u8('ethAddressInstructionIndex'),\n BufferLayout.u16('messageDataOffset'),\n BufferLayout.u16('messageDataSize'),\n BufferLayout.u8('messageInstructionIndex'),\n BufferLayout.blob(20, 'ethAddress'),\n BufferLayout.blob(64, 'signature'),\n BufferLayout.u8('recoveryId'),\n]);\n\nexport class Secp256k1Program {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Public key that identifies the secp256k1 program\n */\n static programId: PublicKey = new PublicKey(\n 'KeccakSecp256k11111111111111111111111111111',\n );\n\n /**\n * Construct an Ethereum address from a secp256k1 public key buffer.\n * @param {Buffer} publicKey a 64 byte secp256k1 public key buffer\n */\n static publicKeyToEthAddress(\n publicKey: Buffer | Uint8Array | Array,\n ): Buffer {\n assert(\n publicKey.length === PUBLIC_KEY_BYTES,\n `Public key must be ${PUBLIC_KEY_BYTES} bytes but received ${publicKey.length} bytes`,\n );\n\n try {\n return Buffer.from(keccak_256(toBuffer(publicKey))).slice(\n -ETHEREUM_ADDRESS_BYTES,\n );\n } catch (error) {\n throw new Error(`Error constructing Ethereum address: ${error}`);\n }\n }\n\n /**\n * Create an secp256k1 instruction with a public key. The public key\n * must be a buffer that is 64 bytes long.\n */\n static createInstructionWithPublicKey(\n params: CreateSecp256k1InstructionWithPublicKeyParams,\n ): TransactionInstruction {\n const {publicKey, message, signature, recoveryId, instructionIndex} =\n params;\n return Secp256k1Program.createInstructionWithEthAddress({\n ethAddress: Secp256k1Program.publicKeyToEthAddress(publicKey),\n message,\n signature,\n recoveryId,\n instructionIndex,\n });\n }\n\n /**\n * Create an secp256k1 instruction with an Ethereum address. The address\n * must be a hex string or a buffer that is 20 bytes long.\n */\n static createInstructionWithEthAddress(\n params: CreateSecp256k1InstructionWithEthAddressParams,\n ): TransactionInstruction {\n const {\n ethAddress: rawAddress,\n message,\n signature,\n recoveryId,\n instructionIndex = 0,\n } = params;\n\n let ethAddress;\n if (typeof rawAddress === 'string') {\n if (rawAddress.startsWith('0x')) {\n ethAddress = Buffer.from(rawAddress.substr(2), 'hex');\n } else {\n ethAddress = Buffer.from(rawAddress, 'hex');\n }\n } else {\n ethAddress = rawAddress;\n }\n\n assert(\n ethAddress.length === ETHEREUM_ADDRESS_BYTES,\n `Address must be ${ETHEREUM_ADDRESS_BYTES} bytes but received ${ethAddress.length} bytes`,\n );\n\n const dataStart = 1 + SIGNATURE_OFFSETS_SERIALIZED_SIZE;\n const ethAddressOffset = dataStart;\n const signatureOffset = dataStart + ethAddress.length;\n const messageDataOffset = signatureOffset + signature.length + 1;\n const numSignatures = 1;\n\n const instructionData = Buffer.alloc(\n SECP256K1_INSTRUCTION_LAYOUT.span + message.length,\n );\n\n SECP256K1_INSTRUCTION_LAYOUT.encode(\n {\n numSignatures,\n signatureOffset,\n signatureInstructionIndex: instructionIndex,\n ethAddressOffset,\n ethAddressInstructionIndex: instructionIndex,\n messageDataOffset,\n messageDataSize: message.length,\n messageInstructionIndex: instructionIndex,\n signature: toBuffer(signature),\n ethAddress: toBuffer(ethAddress),\n recoveryId,\n },\n instructionData,\n );\n\n instructionData.fill(toBuffer(message), SECP256K1_INSTRUCTION_LAYOUT.span);\n\n return new TransactionInstruction({\n keys: [],\n programId: Secp256k1Program.programId,\n data: instructionData,\n });\n }\n\n /**\n * Create an secp256k1 instruction with a private key. The private key\n * must be a buffer that is 32 bytes long.\n */\n static createInstructionWithPrivateKey(\n params: CreateSecp256k1InstructionWithPrivateKeyParams,\n ): TransactionInstruction {\n const {privateKey: pkey, message, instructionIndex} = params;\n\n assert(\n pkey.length === PRIVATE_KEY_BYTES,\n `Private key must be ${PRIVATE_KEY_BYTES} bytes but received ${pkey.length} bytes`,\n );\n\n try {\n const privateKey = toBuffer(pkey);\n const publicKey = publicKeyCreate(\n privateKey,\n false /* isCompressed */,\n ).slice(1); // throw away leading byte\n const messageHash = Buffer.from(keccak_256(toBuffer(message)));\n const [signature, recoveryId] = ecdsaSign(messageHash, privateKey);\n\n return this.createInstructionWithPublicKey({\n publicKey,\n message,\n signature,\n recoveryId,\n instructionIndex,\n });\n } catch (error) {\n throw new Error(`Error creating instruction; ${error}`);\n }\n }\n}\n","import * as BufferLayout from '@solana/buffer-layout';\n\nimport {\n encodeData,\n decodeData,\n InstructionType,\n IInstructionInputData,\n} from '../instruction';\nimport * as Layout from '../layout';\nimport {PublicKey} from '../publickey';\nimport {SystemProgram} from './system';\nimport {\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_STAKE_HISTORY_PUBKEY,\n} from '../sysvar';\nimport {Transaction, TransactionInstruction} from '../transaction';\nimport {toBuffer} from '../utils/to-buffer';\n\n/**\n * Address of the stake config account which configures the rate\n * of stake warmup and cooldown as well as the slashing penalty.\n */\nexport const STAKE_CONFIG_ID = new PublicKey(\n 'StakeConfig11111111111111111111111111111111',\n);\n\n/**\n * Stake account authority info\n */\nexport class Authorized {\n /** stake authority */\n staker: PublicKey;\n /** withdraw authority */\n withdrawer: PublicKey;\n\n /**\n * Create a new Authorized object\n * @param staker the stake authority\n * @param withdrawer the withdraw authority\n */\n constructor(staker: PublicKey, withdrawer: PublicKey) {\n this.staker = staker;\n this.withdrawer = withdrawer;\n }\n}\n\ntype AuthorizedRaw = Readonly<{\n staker: Uint8Array;\n withdrawer: Uint8Array;\n}>;\n\n/**\n * Stake account lockup info\n */\nexport class Lockup {\n /** Unix timestamp of lockup expiration */\n unixTimestamp: number;\n /** Epoch of lockup expiration */\n epoch: number;\n /** Lockup custodian authority */\n custodian: PublicKey;\n\n /**\n * Create a new Lockup object\n */\n constructor(unixTimestamp: number, epoch: number, custodian: PublicKey) {\n this.unixTimestamp = unixTimestamp;\n this.epoch = epoch;\n this.custodian = custodian;\n }\n\n /**\n * Default, inactive Lockup value\n */\n static default: Lockup = new Lockup(0, 0, PublicKey.default);\n}\n\ntype LockupRaw = Readonly<{\n custodian: Uint8Array;\n epoch: number;\n unixTimestamp: number;\n}>;\n\n/**\n * Create stake account transaction params\n */\nexport type CreateStakeAccountParams = {\n /** Address of the account which will fund creation */\n fromPubkey: PublicKey;\n /** Address of the new stake account */\n stakePubkey: PublicKey;\n /** Authorities of the new stake account */\n authorized: Authorized;\n /** Lockup of the new stake account */\n lockup?: Lockup;\n /** Funding amount */\n lamports: number;\n};\n\n/**\n * Create stake account with seed transaction params\n */\nexport type CreateStakeAccountWithSeedParams = {\n fromPubkey: PublicKey;\n stakePubkey: PublicKey;\n basePubkey: PublicKey;\n seed: string;\n authorized: Authorized;\n lockup?: Lockup;\n lamports: number;\n};\n\n/**\n * Initialize stake instruction params\n */\nexport type InitializeStakeParams = {\n stakePubkey: PublicKey;\n authorized: Authorized;\n lockup?: Lockup;\n};\n\n/**\n * Delegate stake instruction params\n */\nexport type DelegateStakeParams = {\n stakePubkey: PublicKey;\n authorizedPubkey: PublicKey;\n votePubkey: PublicKey;\n};\n\n/**\n * Authorize stake instruction params\n */\nexport type AuthorizeStakeParams = {\n stakePubkey: PublicKey;\n authorizedPubkey: PublicKey;\n newAuthorizedPubkey: PublicKey;\n stakeAuthorizationType: StakeAuthorizationType;\n custodianPubkey?: PublicKey;\n};\n\n/**\n * Authorize stake instruction params using a derived key\n */\nexport type AuthorizeWithSeedStakeParams = {\n stakePubkey: PublicKey;\n authorityBase: PublicKey;\n authoritySeed: string;\n authorityOwner: PublicKey;\n newAuthorizedPubkey: PublicKey;\n stakeAuthorizationType: StakeAuthorizationType;\n custodianPubkey?: PublicKey;\n};\n\n/**\n * Split stake instruction params\n */\nexport type SplitStakeParams = {\n stakePubkey: PublicKey;\n authorizedPubkey: PublicKey;\n splitStakePubkey: PublicKey;\n lamports: number;\n};\n\n/**\n * Split with seed transaction params\n */\nexport type SplitStakeWithSeedParams = {\n stakePubkey: PublicKey;\n authorizedPubkey: PublicKey;\n splitStakePubkey: PublicKey;\n basePubkey: PublicKey;\n seed: string;\n lamports: number;\n};\n\n/**\n * Withdraw stake instruction params\n */\nexport type WithdrawStakeParams = {\n stakePubkey: PublicKey;\n authorizedPubkey: PublicKey;\n toPubkey: PublicKey;\n lamports: number;\n custodianPubkey?: PublicKey;\n};\n\n/**\n * Deactivate stake instruction params\n */\nexport type DeactivateStakeParams = {\n stakePubkey: PublicKey;\n authorizedPubkey: PublicKey;\n};\n\n/**\n * Merge stake instruction params\n */\nexport type MergeStakeParams = {\n stakePubkey: PublicKey;\n sourceStakePubKey: PublicKey;\n authorizedPubkey: PublicKey;\n};\n\n/**\n * Stake Instruction class\n */\nexport class StakeInstruction {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Decode a stake instruction and retrieve the instruction type.\n */\n static decodeInstructionType(\n instruction: TransactionInstruction,\n ): StakeInstructionType {\n this.checkProgramId(instruction.programId);\n\n const instructionTypeLayout = BufferLayout.u32('instruction');\n const typeIndex = instructionTypeLayout.decode(instruction.data);\n\n let type: StakeInstructionType | undefined;\n for (const [ixType, layout] of Object.entries(STAKE_INSTRUCTION_LAYOUTS)) {\n if (layout.index == typeIndex) {\n type = ixType as StakeInstructionType;\n break;\n }\n }\n\n if (!type) {\n throw new Error('Instruction type incorrect; not a StakeInstruction');\n }\n\n return type;\n }\n\n /**\n * Decode a initialize stake instruction and retrieve the instruction params.\n */\n static decodeInitialize(\n instruction: TransactionInstruction,\n ): InitializeStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {authorized, lockup} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.Initialize,\n instruction.data,\n );\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n authorized: new Authorized(\n new PublicKey(authorized.staker),\n new PublicKey(authorized.withdrawer),\n ),\n lockup: new Lockup(\n lockup.unixTimestamp,\n lockup.epoch,\n new PublicKey(lockup.custodian),\n ),\n };\n }\n\n /**\n * Decode a delegate stake instruction and retrieve the instruction params.\n */\n static decodeDelegate(\n instruction: TransactionInstruction,\n ): DelegateStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 6);\n decodeData(STAKE_INSTRUCTION_LAYOUTS.Delegate, instruction.data);\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n votePubkey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[5].pubkey,\n };\n }\n\n /**\n * Decode an authorize stake instruction and retrieve the instruction params.\n */\n static decodeAuthorize(\n instruction: TransactionInstruction,\n ): AuthorizeStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n const {newAuthorized, stakeAuthorizationType} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.Authorize,\n instruction.data,\n );\n\n const o: AuthorizeStakeParams = {\n stakePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n newAuthorizedPubkey: new PublicKey(newAuthorized),\n stakeAuthorizationType: {\n index: stakeAuthorizationType,\n },\n };\n if (instruction.keys.length > 3) {\n o.custodianPubkey = instruction.keys[3].pubkey;\n }\n return o;\n }\n\n /**\n * Decode an authorize-with-seed stake instruction and retrieve the instruction params.\n */\n static decodeAuthorizeWithSeed(\n instruction: TransactionInstruction,\n ): AuthorizeWithSeedStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {\n newAuthorized,\n stakeAuthorizationType,\n authoritySeed,\n authorityOwner,\n } = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed,\n instruction.data,\n );\n\n const o: AuthorizeWithSeedStakeParams = {\n stakePubkey: instruction.keys[0].pubkey,\n authorityBase: instruction.keys[1].pubkey,\n authoritySeed: authoritySeed,\n authorityOwner: new PublicKey(authorityOwner),\n newAuthorizedPubkey: new PublicKey(newAuthorized),\n stakeAuthorizationType: {\n index: stakeAuthorizationType,\n },\n };\n if (instruction.keys.length > 3) {\n o.custodianPubkey = instruction.keys[3].pubkey;\n }\n return o;\n }\n\n /**\n * Decode a split stake instruction and retrieve the instruction params.\n */\n static decodeSplit(instruction: TransactionInstruction): SplitStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n const {lamports} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.Split,\n instruction.data,\n );\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n splitStakePubkey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n lamports,\n };\n }\n\n /**\n * Decode a merge stake instruction and retrieve the instruction params.\n */\n static decodeMerge(instruction: TransactionInstruction): MergeStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n decodeData(STAKE_INSTRUCTION_LAYOUTS.Merge, instruction.data);\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n sourceStakePubKey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[4].pubkey,\n };\n }\n\n /**\n * Decode a withdraw stake instruction and retrieve the instruction params.\n */\n static decodeWithdraw(\n instruction: TransactionInstruction,\n ): WithdrawStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 5);\n const {lamports} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.Withdraw,\n instruction.data,\n );\n\n const o: WithdrawStakeParams = {\n stakePubkey: instruction.keys[0].pubkey,\n toPubkey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[4].pubkey,\n lamports,\n };\n if (instruction.keys.length > 5) {\n o.custodianPubkey = instruction.keys[5].pubkey;\n }\n return o;\n }\n\n /**\n * Decode a deactivate stake instruction and retrieve the instruction params.\n */\n static decodeDeactivate(\n instruction: TransactionInstruction,\n ): DeactivateStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n decodeData(STAKE_INSTRUCTION_LAYOUTS.Deactivate, instruction.data);\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n };\n }\n\n /**\n * @internal\n */\n static checkProgramId(programId: PublicKey) {\n if (!programId.equals(StakeProgram.programId)) {\n throw new Error('invalid instruction; programId is not StakeProgram');\n }\n }\n\n /**\n * @internal\n */\n static checkKeyLength(keys: Array, expectedLength: number) {\n if (keys.length < expectedLength) {\n throw new Error(\n `invalid instruction; found ${keys.length} keys, expected at least ${expectedLength}`,\n );\n }\n }\n}\n\n/**\n * An enumeration of valid StakeInstructionType's\n */\nexport type StakeInstructionType =\n // FIXME\n // It would be preferable for this type to be `keyof StakeInstructionInputData`\n // but Typedoc does not transpile `keyof` expressions.\n // See https://github.com/TypeStrong/typedoc/issues/1894\n | 'Authorize'\n | 'AuthorizeWithSeed'\n | 'Deactivate'\n | 'Delegate'\n | 'Initialize'\n | 'Merge'\n | 'Split'\n | 'Withdraw';\n\ntype StakeInstructionInputData = {\n Authorize: IInstructionInputData &\n Readonly<{\n newAuthorized: Uint8Array;\n stakeAuthorizationType: number;\n }>;\n AuthorizeWithSeed: IInstructionInputData &\n Readonly<{\n authorityOwner: Uint8Array;\n authoritySeed: string;\n instruction: number;\n newAuthorized: Uint8Array;\n stakeAuthorizationType: number;\n }>;\n Deactivate: IInstructionInputData;\n Delegate: IInstructionInputData;\n Initialize: IInstructionInputData &\n Readonly<{\n authorized: AuthorizedRaw;\n lockup: LockupRaw;\n }>;\n Merge: IInstructionInputData;\n Split: IInstructionInputData &\n Readonly<{\n lamports: number;\n }>;\n Withdraw: IInstructionInputData &\n Readonly<{\n lamports: number;\n }>;\n};\n\n/**\n * An enumeration of valid stake InstructionType's\n * @internal\n */\nexport const STAKE_INSTRUCTION_LAYOUTS = Object.freeze<{\n [Instruction in StakeInstructionType]: InstructionType<\n StakeInstructionInputData[Instruction]\n >;\n}>({\n Initialize: {\n index: 0,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.authorized(),\n Layout.lockup(),\n ]),\n },\n Authorize: {\n index: 1,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('newAuthorized'),\n BufferLayout.u32('stakeAuthorizationType'),\n ]),\n },\n Delegate: {\n index: 2,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n ]),\n },\n Split: {\n index: 3,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n ]),\n },\n Withdraw: {\n index: 4,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n ]),\n },\n Deactivate: {\n index: 5,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n ]),\n },\n Merge: {\n index: 7,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n ]),\n },\n AuthorizeWithSeed: {\n index: 8,\n layout: BufferLayout.struct(\n [\n BufferLayout.u32('instruction'),\n Layout.publicKey('newAuthorized'),\n BufferLayout.u32('stakeAuthorizationType'),\n Layout.rustString('authoritySeed'),\n Layout.publicKey('authorityOwner'),\n ],\n ),\n },\n});\n\n/**\n * Stake authorization type\n */\nexport type StakeAuthorizationType = {\n /** The Stake Authorization index (from solana-stake-program) */\n index: number;\n};\n\n/**\n * An enumeration of valid StakeAuthorizationLayout's\n */\nexport const StakeAuthorizationLayout = Object.freeze({\n Staker: {\n index: 0,\n },\n Withdrawer: {\n index: 1,\n },\n});\n\n/**\n * Factory class for transactions to interact with the Stake program\n */\nexport class StakeProgram {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Public key that identifies the Stake program\n */\n static programId: PublicKey = new PublicKey(\n 'Stake11111111111111111111111111111111111111',\n );\n\n /**\n * Max space of a Stake account\n *\n * This is generated from the solana-stake-program StakeState struct as\n * `StakeStateV2::size_of()`:\n * https://docs.rs/solana-stake-program/latest/solana_stake_program/stake_state/enum.StakeStateV2.html\n */\n static space: number = 200;\n\n /**\n * Generate an Initialize instruction to add to a Stake Create transaction\n */\n static initialize(params: InitializeStakeParams): TransactionInstruction {\n const {stakePubkey, authorized, lockup: maybeLockup} = params;\n const lockup: Lockup = maybeLockup || Lockup.default;\n const type = STAKE_INSTRUCTION_LAYOUTS.Initialize;\n const data = encodeData(type, {\n authorized: {\n staker: toBuffer(authorized.staker.toBuffer()),\n withdrawer: toBuffer(authorized.withdrawer.toBuffer()),\n },\n lockup: {\n unixTimestamp: lockup.unixTimestamp,\n epoch: lockup.epoch,\n custodian: toBuffer(lockup.custodian.toBuffer()),\n },\n });\n const instructionData = {\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false},\n ],\n programId: this.programId,\n data,\n };\n return new TransactionInstruction(instructionData);\n }\n\n /**\n * Generate a Transaction that creates a new Stake account at\n * an address generated with `from`, a seed, and the Stake programId\n */\n static createAccountWithSeed(\n params: CreateStakeAccountWithSeedParams,\n ): Transaction {\n const transaction = new Transaction();\n transaction.add(\n SystemProgram.createAccountWithSeed({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.stakePubkey,\n basePubkey: params.basePubkey,\n seed: params.seed,\n lamports: params.lamports,\n space: this.space,\n programId: this.programId,\n }),\n );\n\n const {stakePubkey, authorized, lockup} = params;\n return transaction.add(this.initialize({stakePubkey, authorized, lockup}));\n }\n\n /**\n * Generate a Transaction that creates a new Stake account\n */\n static createAccount(params: CreateStakeAccountParams): Transaction {\n const transaction = new Transaction();\n transaction.add(\n SystemProgram.createAccount({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.stakePubkey,\n lamports: params.lamports,\n space: this.space,\n programId: this.programId,\n }),\n );\n\n const {stakePubkey, authorized, lockup} = params;\n return transaction.add(this.initialize({stakePubkey, authorized, lockup}));\n }\n\n /**\n * Generate a Transaction that delegates Stake tokens to a validator\n * Vote PublicKey. This transaction can also be used to redelegate Stake\n * to a new validator Vote PublicKey.\n */\n static delegate(params: DelegateStakeParams): Transaction {\n const {stakePubkey, authorizedPubkey, votePubkey} = params;\n\n const type = STAKE_INSTRUCTION_LAYOUTS.Delegate;\n const data = encodeData(type);\n\n return new Transaction().add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: votePubkey, isSigner: false, isWritable: false},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {\n pubkey: SYSVAR_STAKE_HISTORY_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: STAKE_CONFIG_ID, isSigner: false, isWritable: false},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that authorizes a new PublicKey as Staker\n * or Withdrawer on the Stake account.\n */\n static authorize(params: AuthorizeStakeParams): Transaction {\n const {\n stakePubkey,\n authorizedPubkey,\n newAuthorizedPubkey,\n stakeAuthorizationType,\n custodianPubkey,\n } = params;\n\n const type = STAKE_INSTRUCTION_LAYOUTS.Authorize;\n const data = encodeData(type, {\n newAuthorized: toBuffer(newAuthorizedPubkey.toBuffer()),\n stakeAuthorizationType: stakeAuthorizationType.index,\n });\n\n const keys = [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: true},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ];\n if (custodianPubkey) {\n keys.push({\n pubkey: custodianPubkey,\n isSigner: true,\n isWritable: false,\n });\n }\n return new Transaction().add({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that authorizes a new PublicKey as Staker\n * or Withdrawer on the Stake account.\n */\n static authorizeWithSeed(params: AuthorizeWithSeedStakeParams): Transaction {\n const {\n stakePubkey,\n authorityBase,\n authoritySeed,\n authorityOwner,\n newAuthorizedPubkey,\n stakeAuthorizationType,\n custodianPubkey,\n } = params;\n\n const type = STAKE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed;\n const data = encodeData(type, {\n newAuthorized: toBuffer(newAuthorizedPubkey.toBuffer()),\n stakeAuthorizationType: stakeAuthorizationType.index,\n authoritySeed: authoritySeed,\n authorityOwner: toBuffer(authorityOwner.toBuffer()),\n });\n\n const keys = [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: authorityBase, isSigner: true, isWritable: false},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n ];\n if (custodianPubkey) {\n keys.push({\n pubkey: custodianPubkey,\n isSigner: true,\n isWritable: false,\n });\n }\n return new Transaction().add({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * @internal\n */\n static splitInstruction(params: SplitStakeParams): TransactionInstruction {\n const {stakePubkey, authorizedPubkey, splitStakePubkey, lamports} = params;\n const type = STAKE_INSTRUCTION_LAYOUTS.Split;\n const data = encodeData(type, {lamports});\n return new TransactionInstruction({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: splitStakePubkey, isSigner: false, isWritable: true},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that splits Stake tokens into another stake account\n */\n static split(\n params: SplitStakeParams,\n // Compute the cost of allocating the new stake account in lamports\n rentExemptReserve: number,\n ): Transaction {\n const transaction = new Transaction();\n transaction.add(\n SystemProgram.createAccount({\n fromPubkey: params.authorizedPubkey,\n newAccountPubkey: params.splitStakePubkey,\n lamports: rentExemptReserve,\n space: this.space,\n programId: this.programId,\n }),\n );\n return transaction.add(this.splitInstruction(params));\n }\n\n /**\n * Generate a Transaction that splits Stake tokens into another account\n * derived from a base public key and seed\n */\n static splitWithSeed(\n params: SplitStakeWithSeedParams,\n // If this stake account is new, compute the cost of allocating it in lamports\n rentExemptReserve?: number,\n ): Transaction {\n const {\n stakePubkey,\n authorizedPubkey,\n splitStakePubkey,\n basePubkey,\n seed,\n lamports,\n } = params;\n const transaction = new Transaction();\n transaction.add(\n SystemProgram.allocate({\n accountPubkey: splitStakePubkey,\n basePubkey,\n seed,\n space: this.space,\n programId: this.programId,\n }),\n );\n if (rentExemptReserve && rentExemptReserve > 0) {\n transaction.add(\n SystemProgram.transfer({\n fromPubkey: params.authorizedPubkey,\n toPubkey: splitStakePubkey,\n lamports: rentExemptReserve,\n }),\n );\n }\n return transaction.add(\n this.splitInstruction({\n stakePubkey,\n authorizedPubkey,\n splitStakePubkey,\n lamports,\n }),\n );\n }\n\n /**\n * Generate a Transaction that merges Stake accounts.\n */\n static merge(params: MergeStakeParams): Transaction {\n const {stakePubkey, sourceStakePubKey, authorizedPubkey} = params;\n const type = STAKE_INSTRUCTION_LAYOUTS.Merge;\n const data = encodeData(type);\n\n return new Transaction().add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: sourceStakePubKey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {\n pubkey: SYSVAR_STAKE_HISTORY_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that withdraws deactivated Stake tokens.\n */\n static withdraw(params: WithdrawStakeParams): Transaction {\n const {stakePubkey, authorizedPubkey, toPubkey, lamports, custodianPubkey} =\n params;\n const type = STAKE_INSTRUCTION_LAYOUTS.Withdraw;\n const data = encodeData(type, {lamports});\n\n const keys = [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: toPubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {\n pubkey: SYSVAR_STAKE_HISTORY_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ];\n if (custodianPubkey) {\n keys.push({\n pubkey: custodianPubkey,\n isSigner: true,\n isWritable: false,\n });\n }\n return new Transaction().add({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that deactivates Stake tokens.\n */\n static deactivate(params: DeactivateStakeParams): Transaction {\n const {stakePubkey, authorizedPubkey} = params;\n const type = STAKE_INSTRUCTION_LAYOUTS.Deactivate;\n const data = encodeData(type);\n\n return new Transaction().add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n}\n","import * as BufferLayout from '@solana/buffer-layout';\n\nimport {\n encodeData,\n decodeData,\n InstructionType,\n IInstructionInputData,\n} from '../instruction';\nimport * as Layout from '../layout';\nimport {PublicKey} from '../publickey';\nimport {SystemProgram} from './system';\nimport {SYSVAR_CLOCK_PUBKEY, SYSVAR_RENT_PUBKEY} from '../sysvar';\nimport {Transaction, TransactionInstruction} from '../transaction';\nimport {toBuffer} from '../utils/to-buffer';\n\n/**\n * Vote account info\n */\nexport class VoteInit {\n nodePubkey: PublicKey;\n authorizedVoter: PublicKey;\n authorizedWithdrawer: PublicKey;\n commission: number; /** [0, 100] */\n\n constructor(\n nodePubkey: PublicKey,\n authorizedVoter: PublicKey,\n authorizedWithdrawer: PublicKey,\n commission: number,\n ) {\n this.nodePubkey = nodePubkey;\n this.authorizedVoter = authorizedVoter;\n this.authorizedWithdrawer = authorizedWithdrawer;\n this.commission = commission;\n }\n}\n\n/**\n * Create vote account transaction params\n */\nexport type CreateVoteAccountParams = {\n fromPubkey: PublicKey;\n votePubkey: PublicKey;\n voteInit: VoteInit;\n lamports: number;\n};\n\n/**\n * InitializeAccount instruction params\n */\nexport type InitializeAccountParams = {\n votePubkey: PublicKey;\n nodePubkey: PublicKey;\n voteInit: VoteInit;\n};\n\n/**\n * Authorize instruction params\n */\nexport type AuthorizeVoteParams = {\n votePubkey: PublicKey;\n /** Current vote or withdraw authority, depending on `voteAuthorizationType` */\n authorizedPubkey: PublicKey;\n newAuthorizedPubkey: PublicKey;\n voteAuthorizationType: VoteAuthorizationType;\n};\n\n/**\n * AuthorizeWithSeed instruction params\n */\nexport type AuthorizeVoteWithSeedParams = {\n currentAuthorityDerivedKeyBasePubkey: PublicKey;\n currentAuthorityDerivedKeyOwnerPubkey: PublicKey;\n currentAuthorityDerivedKeySeed: string;\n newAuthorizedPubkey: PublicKey;\n voteAuthorizationType: VoteAuthorizationType;\n votePubkey: PublicKey;\n};\n\n/**\n * Withdraw from vote account transaction params\n */\nexport type WithdrawFromVoteAccountParams = {\n votePubkey: PublicKey;\n authorizedWithdrawerPubkey: PublicKey;\n lamports: number;\n toPubkey: PublicKey;\n};\n\n/**\n * Update validator identity (node pubkey) vote account instruction params.\n */\nexport type UpdateValidatorIdentityParams = {\n votePubkey: PublicKey;\n authorizedWithdrawerPubkey: PublicKey;\n nodePubkey: PublicKey;\n};\n\n/**\n * Vote Instruction class\n */\nexport class VoteInstruction {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Decode a vote instruction and retrieve the instruction type.\n */\n static decodeInstructionType(\n instruction: TransactionInstruction,\n ): VoteInstructionType {\n this.checkProgramId(instruction.programId);\n\n const instructionTypeLayout = BufferLayout.u32('instruction');\n const typeIndex = instructionTypeLayout.decode(instruction.data);\n\n let type: VoteInstructionType | undefined;\n for (const [ixType, layout] of Object.entries(VOTE_INSTRUCTION_LAYOUTS)) {\n if (layout.index == typeIndex) {\n type = ixType as VoteInstructionType;\n break;\n }\n }\n\n if (!type) {\n throw new Error('Instruction type incorrect; not a VoteInstruction');\n }\n\n return type;\n }\n\n /**\n * Decode an initialize vote instruction and retrieve the instruction params.\n */\n static decodeInitializeAccount(\n instruction: TransactionInstruction,\n ): InitializeAccountParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 4);\n\n const {voteInit} = decodeData(\n VOTE_INSTRUCTION_LAYOUTS.InitializeAccount,\n instruction.data,\n );\n\n return {\n votePubkey: instruction.keys[0].pubkey,\n nodePubkey: instruction.keys[3].pubkey,\n voteInit: new VoteInit(\n new PublicKey(voteInit.nodePubkey),\n new PublicKey(voteInit.authorizedVoter),\n new PublicKey(voteInit.authorizedWithdrawer),\n voteInit.commission,\n ),\n };\n }\n\n /**\n * Decode an authorize instruction and retrieve the instruction params.\n */\n static decodeAuthorize(\n instruction: TransactionInstruction,\n ): AuthorizeVoteParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n\n const {newAuthorized, voteAuthorizationType} = decodeData(\n VOTE_INSTRUCTION_LAYOUTS.Authorize,\n instruction.data,\n );\n\n return {\n votePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n newAuthorizedPubkey: new PublicKey(newAuthorized),\n voteAuthorizationType: {\n index: voteAuthorizationType,\n },\n };\n }\n\n /**\n * Decode an authorize instruction and retrieve the instruction params.\n */\n static decodeAuthorizeWithSeed(\n instruction: TransactionInstruction,\n ): AuthorizeVoteWithSeedParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n\n const {\n voteAuthorizeWithSeedArgs: {\n currentAuthorityDerivedKeyOwnerPubkey,\n currentAuthorityDerivedKeySeed,\n newAuthorized,\n voteAuthorizationType,\n },\n } = decodeData(\n VOTE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed,\n instruction.data,\n );\n\n return {\n currentAuthorityDerivedKeyBasePubkey: instruction.keys[2].pubkey,\n currentAuthorityDerivedKeyOwnerPubkey: new PublicKey(\n currentAuthorityDerivedKeyOwnerPubkey,\n ),\n currentAuthorityDerivedKeySeed: currentAuthorityDerivedKeySeed,\n newAuthorizedPubkey: new PublicKey(newAuthorized),\n voteAuthorizationType: {\n index: voteAuthorizationType,\n },\n votePubkey: instruction.keys[0].pubkey,\n };\n }\n\n /**\n * Decode a withdraw instruction and retrieve the instruction params.\n */\n static decodeWithdraw(\n instruction: TransactionInstruction,\n ): WithdrawFromVoteAccountParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n\n const {lamports} = decodeData(\n VOTE_INSTRUCTION_LAYOUTS.Withdraw,\n instruction.data,\n );\n\n return {\n votePubkey: instruction.keys[0].pubkey,\n authorizedWithdrawerPubkey: instruction.keys[2].pubkey,\n lamports,\n toPubkey: instruction.keys[1].pubkey,\n };\n }\n\n /**\n * @internal\n */\n static checkProgramId(programId: PublicKey) {\n if (!programId.equals(VoteProgram.programId)) {\n throw new Error('invalid instruction; programId is not VoteProgram');\n }\n }\n\n /**\n * @internal\n */\n static checkKeyLength(keys: Array, expectedLength: number) {\n if (keys.length < expectedLength) {\n throw new Error(\n `invalid instruction; found ${keys.length} keys, expected at least ${expectedLength}`,\n );\n }\n }\n}\n\n/**\n * An enumeration of valid VoteInstructionType's\n */\nexport type VoteInstructionType =\n // FIXME\n // It would be preferable for this type to be `keyof VoteInstructionInputData`\n // but Typedoc does not transpile `keyof` expressions.\n // See https://github.com/TypeStrong/typedoc/issues/1894\n | 'Authorize'\n | 'AuthorizeWithSeed'\n | 'InitializeAccount'\n | 'Withdraw'\n | 'UpdateValidatorIdentity';\n\n/** @internal */\nexport type VoteAuthorizeWithSeedArgs = Readonly<{\n currentAuthorityDerivedKeyOwnerPubkey: Uint8Array;\n currentAuthorityDerivedKeySeed: string;\n newAuthorized: Uint8Array;\n voteAuthorizationType: number;\n}>;\ntype VoteInstructionInputData = {\n Authorize: IInstructionInputData & {\n newAuthorized: Uint8Array;\n voteAuthorizationType: number;\n };\n AuthorizeWithSeed: IInstructionInputData & {\n voteAuthorizeWithSeedArgs: VoteAuthorizeWithSeedArgs;\n };\n InitializeAccount: IInstructionInputData & {\n voteInit: Readonly<{\n authorizedVoter: Uint8Array;\n authorizedWithdrawer: Uint8Array;\n commission: number;\n nodePubkey: Uint8Array;\n }>;\n };\n Withdraw: IInstructionInputData & {\n lamports: number;\n };\n UpdateValidatorIdentity: IInstructionInputData;\n};\n\nconst VOTE_INSTRUCTION_LAYOUTS = Object.freeze<{\n [Instruction in VoteInstructionType]: InstructionType<\n VoteInstructionInputData[Instruction]\n >;\n}>({\n InitializeAccount: {\n index: 0,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.voteInit(),\n ]),\n },\n Authorize: {\n index: 1,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('newAuthorized'),\n BufferLayout.u32('voteAuthorizationType'),\n ]),\n },\n Withdraw: {\n index: 3,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n ]),\n },\n UpdateValidatorIdentity: {\n index: 4,\n layout: BufferLayout.struct<\n VoteInstructionInputData['UpdateValidatorIdentity']\n >([BufferLayout.u32('instruction')]),\n },\n AuthorizeWithSeed: {\n index: 10,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.voteAuthorizeWithSeedArgs(),\n ]),\n },\n});\n\n/**\n * VoteAuthorize type\n */\nexport type VoteAuthorizationType = {\n /** The VoteAuthorize index (from solana-vote-program) */\n index: number;\n};\n\n/**\n * An enumeration of valid VoteAuthorization layouts.\n */\nexport const VoteAuthorizationLayout = Object.freeze({\n Voter: {\n index: 0,\n },\n Withdrawer: {\n index: 1,\n },\n});\n\n/**\n * Factory class for transactions to interact with the Vote program\n */\nexport class VoteProgram {\n /**\n * @internal\n */\n constructor() {}\n\n /**\n * Public key that identifies the Vote program\n */\n static programId: PublicKey = new PublicKey(\n 'Vote111111111111111111111111111111111111111',\n );\n\n /**\n * Max space of a Vote account\n *\n * This is generated from the solana-vote-program VoteState struct as\n * `VoteState::size_of()`:\n * https://docs.rs/solana-vote-program/1.9.5/solana_vote_program/vote_state/struct.VoteState.html#method.size_of\n *\n * KEEP IN SYNC WITH `VoteState::size_of()` in https://github.com/solana-labs/solana/blob/a474cb24b9238f5edcc982f65c0b37d4a1046f7e/sdk/program/src/vote/state/mod.rs#L340-L342\n */\n static space: number = 3762;\n\n /**\n * Generate an Initialize instruction.\n */\n static initializeAccount(\n params: InitializeAccountParams,\n ): TransactionInstruction {\n const {votePubkey, nodePubkey, voteInit} = params;\n const type = VOTE_INSTRUCTION_LAYOUTS.InitializeAccount;\n const data = encodeData(type, {\n voteInit: {\n nodePubkey: toBuffer(voteInit.nodePubkey.toBuffer()),\n authorizedVoter: toBuffer(voteInit.authorizedVoter.toBuffer()),\n authorizedWithdrawer: toBuffer(\n voteInit.authorizedWithdrawer.toBuffer(),\n ),\n commission: voteInit.commission,\n },\n });\n const instructionData = {\n keys: [\n {pubkey: votePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {pubkey: nodePubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n };\n return new TransactionInstruction(instructionData);\n }\n\n /**\n * Generate a transaction that creates a new Vote account.\n */\n static createAccount(params: CreateVoteAccountParams): Transaction {\n const transaction = new Transaction();\n transaction.add(\n SystemProgram.createAccount({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.votePubkey,\n lamports: params.lamports,\n space: this.space,\n programId: this.programId,\n }),\n );\n\n return transaction.add(\n this.initializeAccount({\n votePubkey: params.votePubkey,\n nodePubkey: params.voteInit.nodePubkey,\n voteInit: params.voteInit,\n }),\n );\n }\n\n /**\n * Generate a transaction that authorizes a new Voter or Withdrawer on the Vote account.\n */\n static authorize(params: AuthorizeVoteParams): Transaction {\n const {\n votePubkey,\n authorizedPubkey,\n newAuthorizedPubkey,\n voteAuthorizationType,\n } = params;\n\n const type = VOTE_INSTRUCTION_LAYOUTS.Authorize;\n const data = encodeData(type, {\n newAuthorized: toBuffer(newAuthorizedPubkey.toBuffer()),\n voteAuthorizationType: voteAuthorizationType.index,\n });\n\n const keys = [\n {pubkey: votePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ];\n\n return new Transaction().add({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction that authorizes a new Voter or Withdrawer on the Vote account\n * where the current Voter or Withdrawer authority is a derived key.\n */\n static authorizeWithSeed(params: AuthorizeVoteWithSeedParams): Transaction {\n const {\n currentAuthorityDerivedKeyBasePubkey,\n currentAuthorityDerivedKeyOwnerPubkey,\n currentAuthorityDerivedKeySeed,\n newAuthorizedPubkey,\n voteAuthorizationType,\n votePubkey,\n } = params;\n\n const type = VOTE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed;\n const data = encodeData(type, {\n voteAuthorizeWithSeedArgs: {\n currentAuthorityDerivedKeyOwnerPubkey: toBuffer(\n currentAuthorityDerivedKeyOwnerPubkey.toBuffer(),\n ),\n currentAuthorityDerivedKeySeed: currentAuthorityDerivedKeySeed,\n newAuthorized: toBuffer(newAuthorizedPubkey.toBuffer()),\n voteAuthorizationType: voteAuthorizationType.index,\n },\n });\n\n const keys = [\n {pubkey: votePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {\n pubkey: currentAuthorityDerivedKeyBasePubkey,\n isSigner: true,\n isWritable: false,\n },\n ];\n\n return new Transaction().add({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction to withdraw from a Vote account.\n */\n static withdraw(params: WithdrawFromVoteAccountParams): Transaction {\n const {votePubkey, authorizedWithdrawerPubkey, lamports, toPubkey} = params;\n const type = VOTE_INSTRUCTION_LAYOUTS.Withdraw;\n const data = encodeData(type, {lamports});\n\n const keys = [\n {pubkey: votePubkey, isSigner: false, isWritable: true},\n {pubkey: toPubkey, isSigner: false, isWritable: true},\n {pubkey: authorizedWithdrawerPubkey, isSigner: true, isWritable: false},\n ];\n\n return new Transaction().add({\n keys,\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a transaction to withdraw safely from a Vote account.\n *\n * This function was created as a safeguard for vote accounts running validators, `safeWithdraw`\n * checks that the withdraw amount will not exceed the specified balance while leaving enough left\n * to cover rent. If you wish to close the vote account by withdrawing the full amount, call the\n * `withdraw` method directly.\n */\n static safeWithdraw(\n params: WithdrawFromVoteAccountParams,\n currentVoteAccountBalance: number,\n rentExemptMinimum: number,\n ): Transaction {\n if (params.lamports > currentVoteAccountBalance - rentExemptMinimum) {\n throw new Error(\n 'Withdraw will leave vote account with insufficient funds.',\n );\n }\n return VoteProgram.withdraw(params);\n }\n\n /**\n * Generate a transaction to update the validator identity (node pubkey) of a Vote account.\n */\n static updateValidatorIdentity(\n params: UpdateValidatorIdentityParams,\n ): Transaction {\n const {votePubkey, authorizedWithdrawerPubkey, nodePubkey} = params;\n const type = VOTE_INSTRUCTION_LAYOUTS.UpdateValidatorIdentity;\n const data = encodeData(type);\n\n const keys = [\n {pubkey: votePubkey, isSigner: false, isWritable: true},\n {pubkey: nodePubkey, isSigner: true, isWritable: false},\n {pubkey: authorizedWithdrawerPubkey, isSigner: true, isWritable: false},\n ];\n\n return new Transaction().add({\n keys,\n programId: this.programId,\n data,\n });\n }\n}\n","import {Buffer} from 'buffer';\nimport {\n assert as assertType,\n optional,\n string,\n type as pick,\n} from 'superstruct';\n\nimport * as Layout from './layout';\nimport * as shortvec from './utils/shortvec-encoding';\nimport {PublicKey, PUBLIC_KEY_LENGTH} from './publickey';\nimport {guardedShift, guardedSplice} from './utils/guarded-array-utils';\n\nexport const VALIDATOR_INFO_KEY = new PublicKey(\n 'Va1idator1nfo111111111111111111111111111111',\n);\n\n/**\n * @internal\n */\ntype ConfigKey = {\n publicKey: PublicKey;\n isSigner: boolean;\n};\n\n/**\n * Info used to identity validators.\n */\nexport type Info = {\n /** validator name */\n name: string;\n /** optional, validator website */\n website?: string;\n /** optional, extra information the validator chose to share */\n details?: string;\n /** optional, validator logo URL */\n iconUrl?: string;\n /** optional, used to identify validators on keybase.io */\n keybaseUsername?: string;\n};\n\nconst InfoString = pick({\n name: string(),\n website: optional(string()),\n details: optional(string()),\n iconUrl: optional(string()),\n keybaseUsername: optional(string()),\n});\n\n/**\n * ValidatorInfo class\n */\nexport class ValidatorInfo {\n /**\n * validator public key\n */\n key: PublicKey;\n /**\n * validator information\n */\n info: Info;\n\n /**\n * Construct a valid ValidatorInfo\n *\n * @param key validator public key\n * @param info validator information\n */\n constructor(key: PublicKey, info: Info) {\n this.key = key;\n this.info = info;\n }\n\n /**\n * Deserialize ValidatorInfo from the config account data. Exactly two config\n * keys are required in the data.\n *\n * @param buffer config account data\n * @return null if info was not found\n */\n static fromConfigData(\n buffer: Buffer | Uint8Array | Array,\n ): ValidatorInfo | null {\n let byteArray = [...buffer];\n const configKeyCount = shortvec.decodeLength(byteArray);\n if (configKeyCount !== 2) return null;\n\n const configKeys: Array = [];\n for (let i = 0; i < 2; i++) {\n const publicKey = new PublicKey(\n guardedSplice(byteArray, 0, PUBLIC_KEY_LENGTH),\n );\n const isSigner = guardedShift(byteArray) === 1;\n configKeys.push({publicKey, isSigner});\n }\n\n if (configKeys[0].publicKey.equals(VALIDATOR_INFO_KEY)) {\n if (configKeys[1].isSigner) {\n const rawInfo: any = Layout.rustString().decode(Buffer.from(byteArray));\n const info = JSON.parse(rawInfo as string);\n assertType(info, InfoString);\n return new ValidatorInfo(configKeys[1].publicKey, info);\n }\n }\n\n return null;\n }\n}\n","import * as BufferLayout from '@solana/buffer-layout';\nimport type {Buffer} from 'buffer';\n\nimport * as Layout from './layout';\nimport {PublicKey} from './publickey';\nimport {toBuffer} from './utils/to-buffer';\n\nexport const VOTE_PROGRAM_ID = new PublicKey(\n 'Vote111111111111111111111111111111111111111',\n);\n\nexport type Lockout = {\n slot: number;\n confirmationCount: number;\n};\n\n/**\n * History of how many credits earned by the end of each epoch\n */\nexport type EpochCredits = Readonly<{\n epoch: number;\n credits: number;\n prevCredits: number;\n}>;\n\nexport type AuthorizedVoter = Readonly<{\n epoch: number;\n authorizedVoter: PublicKey;\n}>;\n\ntype AuthorizedVoterRaw = Readonly<{\n authorizedVoter: Uint8Array;\n epoch: number;\n}>;\n\ntype PriorVoters = Readonly<{\n buf: PriorVoterRaw[];\n idx: number;\n isEmpty: number;\n}>;\n\nexport type PriorVoter = Readonly<{\n authorizedPubkey: PublicKey;\n epochOfLastAuthorizedSwitch: number;\n targetEpoch: number;\n}>;\n\ntype PriorVoterRaw = Readonly<{\n authorizedPubkey: Uint8Array;\n epochOfLastAuthorizedSwitch: number;\n targetEpoch: number;\n}>;\n\nexport type BlockTimestamp = Readonly<{\n slot: number;\n timestamp: number;\n}>;\n\ntype VoteAccountData = Readonly<{\n authorizedVoters: AuthorizedVoterRaw[];\n authorizedWithdrawer: Uint8Array;\n commission: number;\n epochCredits: EpochCredits[];\n lastTimestamp: BlockTimestamp;\n nodePubkey: Uint8Array;\n priorVoters: PriorVoters;\n rootSlot: number;\n rootSlotValid: number;\n votes: Lockout[];\n}>;\n\n/**\n * See https://github.com/solana-labs/solana/blob/8a12ed029cfa38d4a45400916c2463fb82bbec8c/programs/vote_api/src/vote_state.rs#L68-L88\n *\n * @internal\n */\nconst VoteAccountLayout = BufferLayout.struct([\n Layout.publicKey('nodePubkey'),\n Layout.publicKey('authorizedWithdrawer'),\n BufferLayout.u8('commission'),\n BufferLayout.nu64(), // votes.length\n BufferLayout.seq(\n BufferLayout.struct([\n BufferLayout.nu64('slot'),\n BufferLayout.u32('confirmationCount'),\n ]),\n BufferLayout.offset(BufferLayout.u32(), -8),\n 'votes',\n ),\n BufferLayout.u8('rootSlotValid'),\n BufferLayout.nu64('rootSlot'),\n BufferLayout.nu64(), // authorizedVoters.length\n BufferLayout.seq(\n BufferLayout.struct([\n BufferLayout.nu64('epoch'),\n Layout.publicKey('authorizedVoter'),\n ]),\n BufferLayout.offset(BufferLayout.u32(), -8),\n 'authorizedVoters',\n ),\n BufferLayout.struct(\n [\n BufferLayout.seq(\n BufferLayout.struct([\n Layout.publicKey('authorizedPubkey'),\n BufferLayout.nu64('epochOfLastAuthorizedSwitch'),\n BufferLayout.nu64('targetEpoch'),\n ]),\n 32,\n 'buf',\n ),\n BufferLayout.nu64('idx'),\n BufferLayout.u8('isEmpty'),\n ],\n 'priorVoters',\n ),\n BufferLayout.nu64(), // epochCredits.length\n BufferLayout.seq(\n BufferLayout.struct([\n BufferLayout.nu64('epoch'),\n BufferLayout.nu64('credits'),\n BufferLayout.nu64('prevCredits'),\n ]),\n BufferLayout.offset(BufferLayout.u32(), -8),\n 'epochCredits',\n ),\n BufferLayout.struct(\n [BufferLayout.nu64('slot'), BufferLayout.nu64('timestamp')],\n 'lastTimestamp',\n ),\n]);\n\ntype VoteAccountArgs = {\n nodePubkey: PublicKey;\n authorizedWithdrawer: PublicKey;\n commission: number;\n rootSlot: number | null;\n votes: Lockout[];\n authorizedVoters: AuthorizedVoter[];\n priorVoters: PriorVoter[];\n epochCredits: EpochCredits[];\n lastTimestamp: BlockTimestamp;\n};\n\n/**\n * VoteAccount class\n */\nexport class VoteAccount {\n nodePubkey: PublicKey;\n authorizedWithdrawer: PublicKey;\n commission: number;\n rootSlot: number | null;\n votes: Lockout[];\n authorizedVoters: AuthorizedVoter[];\n priorVoters: PriorVoter[];\n epochCredits: EpochCredits[];\n lastTimestamp: BlockTimestamp;\n\n /**\n * @internal\n */\n constructor(args: VoteAccountArgs) {\n this.nodePubkey = args.nodePubkey;\n this.authorizedWithdrawer = args.authorizedWithdrawer;\n this.commission = args.commission;\n this.rootSlot = args.rootSlot;\n this.votes = args.votes;\n this.authorizedVoters = args.authorizedVoters;\n this.priorVoters = args.priorVoters;\n this.epochCredits = args.epochCredits;\n this.lastTimestamp = args.lastTimestamp;\n }\n\n /**\n * Deserialize VoteAccount from the account data.\n *\n * @param buffer account data\n * @return VoteAccount\n */\n static fromAccountData(\n buffer: Buffer | Uint8Array | Array,\n ): VoteAccount {\n const versionOffset = 4;\n const va = VoteAccountLayout.decode(toBuffer(buffer), versionOffset);\n\n let rootSlot: number | null = va.rootSlot;\n if (!va.rootSlotValid) {\n rootSlot = null;\n }\n\n return new VoteAccount({\n nodePubkey: new PublicKey(va.nodePubkey),\n authorizedWithdrawer: new PublicKey(va.authorizedWithdrawer),\n commission: va.commission,\n votes: va.votes,\n rootSlot,\n authorizedVoters: va.authorizedVoters.map(parseAuthorizedVoter),\n priorVoters: getPriorVoters(va.priorVoters),\n epochCredits: va.epochCredits,\n lastTimestamp: va.lastTimestamp,\n });\n }\n}\n\nfunction parseAuthorizedVoter({\n authorizedVoter,\n epoch,\n}: AuthorizedVoterRaw): AuthorizedVoter {\n return {\n epoch,\n authorizedVoter: new PublicKey(authorizedVoter),\n };\n}\n\nfunction parsePriorVoters({\n authorizedPubkey,\n epochOfLastAuthorizedSwitch,\n targetEpoch,\n}: PriorVoterRaw): PriorVoter {\n return {\n authorizedPubkey: new PublicKey(authorizedPubkey),\n epochOfLastAuthorizedSwitch,\n targetEpoch,\n };\n}\n\nfunction getPriorVoters({buf, idx, isEmpty}: PriorVoters): PriorVoter[] {\n if (isEmpty) {\n return [];\n }\n\n return [\n ...buf.slice(idx + 1).map(parsePriorVoters),\n ...buf.slice(0, idx).map(parsePriorVoters),\n ];\n}\n","const endpoint = {\n http: {\n devnet: 'http://api.devnet.solana.com',\n testnet: 'http://api.testnet.solana.com',\n 'mainnet-beta': 'http://api.mainnet-beta.solana.com/',\n },\n https: {\n devnet: 'https://api.devnet.solana.com',\n testnet: 'https://api.testnet.solana.com',\n 'mainnet-beta': 'https://api.mainnet-beta.solana.com/',\n },\n};\n\nexport type Cluster = 'devnet' | 'testnet' | 'mainnet-beta';\n\n/**\n * Retrieves the RPC API URL for the specified cluster\n * @param {Cluster} [cluster=\"devnet\"] - The cluster name of the RPC API URL to use. Possible options: 'devnet' | 'testnet' | 'mainnet-beta'\n * @param {boolean} [tls=\"http\"] - Use TLS when connecting to cluster.\n *\n * @returns {string} URL string of the RPC endpoint\n */\nexport function clusterApiUrl(cluster?: Cluster, tls?: boolean): string {\n const key = tls === false ? 'http' : 'https';\n\n if (!cluster) {\n return endpoint[key]['devnet'];\n }\n\n const url = endpoint[key][cluster];\n if (!url) {\n throw new Error(`Unknown ${key} cluster: ${cluster}`);\n }\n return url;\n}\n","import type {Buffer} from 'buffer';\n\nimport {\n BlockheightBasedTransactionConfirmationStrategy,\n Connection,\n DurableNonceTransactionConfirmationStrategy,\n TransactionConfirmationStrategy,\n} from '../connection';\nimport type {TransactionSignature} from '../transaction';\nimport type {ConfirmOptions} from '../connection';\nimport {SendTransactionError} from '../errors';\n\n/**\n * Send and confirm a raw transaction\n *\n * If `commitment` option is not specified, defaults to 'max' commitment.\n *\n * @param {Connection} connection\n * @param {Buffer} rawTransaction\n * @param {TransactionConfirmationStrategy} confirmationStrategy\n * @param {ConfirmOptions} [options]\n * @returns {Promise}\n */\nexport async function sendAndConfirmRawTransaction(\n connection: Connection,\n rawTransaction: Buffer,\n confirmationStrategy: TransactionConfirmationStrategy,\n options?: ConfirmOptions,\n): Promise;\n\n/**\n * @deprecated Calling `sendAndConfirmRawTransaction()` without a `confirmationStrategy`\n * is no longer supported and will be removed in a future version.\n */\n// eslint-disable-next-line no-redeclare\nexport async function sendAndConfirmRawTransaction(\n connection: Connection,\n rawTransaction: Buffer,\n options?: ConfirmOptions,\n): Promise;\n\n// eslint-disable-next-line no-redeclare\nexport async function sendAndConfirmRawTransaction(\n connection: Connection,\n rawTransaction: Buffer,\n confirmationStrategyOrConfirmOptions:\n | TransactionConfirmationStrategy\n | ConfirmOptions\n | undefined,\n maybeConfirmOptions?: ConfirmOptions,\n): Promise {\n let confirmationStrategy: TransactionConfirmationStrategy | undefined;\n let options: ConfirmOptions | undefined;\n if (\n confirmationStrategyOrConfirmOptions &&\n Object.prototype.hasOwnProperty.call(\n confirmationStrategyOrConfirmOptions,\n 'lastValidBlockHeight',\n )\n ) {\n confirmationStrategy =\n confirmationStrategyOrConfirmOptions as BlockheightBasedTransactionConfirmationStrategy;\n options = maybeConfirmOptions;\n } else if (\n confirmationStrategyOrConfirmOptions &&\n Object.prototype.hasOwnProperty.call(\n confirmationStrategyOrConfirmOptions,\n 'nonceValue',\n )\n ) {\n confirmationStrategy =\n confirmationStrategyOrConfirmOptions as DurableNonceTransactionConfirmationStrategy;\n options = maybeConfirmOptions;\n } else {\n options = confirmationStrategyOrConfirmOptions as\n | ConfirmOptions\n | undefined;\n }\n const sendOptions = options && {\n skipPreflight: options.skipPreflight,\n preflightCommitment: options.preflightCommitment || options.commitment,\n minContextSlot: options.minContextSlot,\n };\n\n const signature = await connection.sendRawTransaction(\n rawTransaction,\n sendOptions,\n );\n\n const commitment = options && options.commitment;\n const confirmationPromise = confirmationStrategy\n ? connection.confirmTransaction(confirmationStrategy, commitment)\n : connection.confirmTransaction(signature, commitment);\n const status = (await confirmationPromise).value;\n\n if (status.err) {\n if (signature != null) {\n throw new SendTransactionError({\n action: sendOptions?.skipPreflight ? 'send' : 'simulate',\n signature: signature,\n transactionMessage: `Status: (${JSON.stringify(status)})`,\n });\n }\n throw new Error(\n `Raw transaction ${signature} failed (${JSON.stringify(status)})`,\n );\n }\n\n return signature;\n}\n","export * from './account';\nexport * from './blockhash';\nexport * from './bpf-loader-deprecated';\nexport * from './bpf-loader';\nexport * from './connection';\nexport * from './epoch-schedule';\nexport * from './errors';\nexport * from './fee-calculator';\nexport * from './keypair';\nexport * from './loader';\nexport * from './message';\nexport * from './nonce-account';\nexport * from './programs';\nexport * from './publickey';\nexport * from './transaction';\nexport * from './validator-info';\nexport * from './vote-account';\nexport * from './sysvar';\nexport * from './utils';\n\n/**\n * There are 1-billion lamports in one SOL\n */\nexport const LAMPORTS_PER_SOL = 1000000000;\n"],"names":["base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","Uint8Array","Array","code","i","len","length","charCodeAt","getLens","b64","Error","validLen","indexOf","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","push","join","extraBytes","parts","maxChunkLength","len2","ieee754","read","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","Math","pow","write","value","c","rt","abs","isNaN","floor","log","LN2","base64","require$$0","require$$1","customInspectSymbol","Symbol","exports","Buffer","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","console","error","proto","foo","Object","setPrototypeOf","prototype","defineProperty","enumerable","get","isBuffer","this","undefined","byteOffset","createBuffer","RangeError","buf","arg","encodingOrOffset","TypeError","allocUnsafe","from","poolSize","fromString","ArrayBuffer","isView","fromArrayView","isInstance","fromArrayBuffer","SharedArrayBuffer","valueOf","b","fromObject","toPrimitive","assertSize","size","alloc","fill","encoding","checked","allocUnsafeSlow","string","isEncoding","actual","slice","fromArrayLike","array","arrayView","copy","obj","numberIsNaN","type","isArray","data","toString","_isBuffer","compare","a","x","y","min","String","toLowerCase","concat","list","pos","set","call","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","swap16","swap32","swap64","apply","toLocaleString","equals","inspect","str","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","j","includes","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","_arr","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","fromCharCode","ret","out","hexSliceLookupTable","bytes","newBuf","subarray","checkOffset","ext","readUintLE","readUIntLE","noAssert","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","lo","hi","BigInt","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUintLE","writeUIntLE","maxBytes","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","checkIEEE754","writeFloat","littleEndian","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","NodeError","constructor","super","writable","configurable","name","stack","message","range","input","msg","received","isInteger","addNumericalSeparator","checkBounds","ERR_OUT_OF_RANGE","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","INVALID_BASE64_RE","base64clean","split","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","anumber","isSafeInteger","isBytes","abytes","lengths","ahash","h","create","outputLen","blockLen","aexists","instance","checkFinished","destroyed","finished","aoutput","crypto","globalThis","createView","DataView","rotr","word","shift","TextEncoder","encode","toBytes","concatBytes","arrays","sum","pad","Hash$1","Hash","clone","_cloneInto","wrapConstructor","hashCons","hashC","update","digest","randomBytes","bytesLength","getRandomValues","setBigUint64","view","_32n","_u32_max","wh","wl","l","setUint32","Chi","Maj","HashMD","padOffset","take","dataView","process","roundClean","digestInto","oview","outLen","state","destroy","to","U32_MASK64","fromBig","le","lst","Ah","Uint32Array","Al","toBig","shrSH","_l","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","rotr32H","_h","rotr32L","rotlSH","rotlSL","rotlBH","rotlBL","add","Bh","Bl","add3L","Cl","add3H","low","Ch","add4L","Dl","add4H","Dh","add5L","El","add5H","Eh","u64","SHA512_Kh","SHA512_Kl","map","SHA512_W_H","SHA512_W_L","SHA512","Fh","Fl","Gh","Gl","Hh","Hl","getUint32","W15h","W15l","s0h","s0l","W2h","W2l","s1h","s1l","SUMl","SUMh","sigma1h","sigma1l","CHIh","CHIl","T1ll","T1h","T1l","sigma0h","sigma0l","MAJh","MAJl","All","sha512","_0n","_1n","_2n","item","abool","title","hexes","_","padStart","bytesToHex","hex","numberToHexUnpadded","hexToNumber","asciis","_0","_9","A","F","f","asciiToBase16","ch","hexToBytes","hl","al","ai","n1","n2","char","bytesToNumberBE","bytesToNumberLE","reverse","numberToBytesBE","numberToBytesLE","numberToVarBytesBE","ensureBytes","expectedLength","equalBytes","diff","isPosBig","inRange","aInRange","bitLen","bitGet","bitSet","bitMask","u8n","u8fr","createHmacDrbg","hashLen","qByteLen","hmacFn","v","k","reset","reseed","seed","gen","sl","genUntil","pred","validatorFns","bigint","function","boolean","stringOrUint8Array","field","object","Fp","isValid","hash","validateObject","validators","optValidators","checkField","fieldName","isOptional","checkVal","entries","notImplemented","memoized","WeakMap","args","computed","_3n","_4n","_5n","_8n","mod","result","power","modulo","pow2","invert","number","u","q","r","gcd","tonelliShanks","P","legendreC","Q","S","Z","p1div4","tonelliFast","root","eql","sqr","Q1div2","tonelliSlow","neg","ONE","g","ZERO","t2","ge","FpSqrt","sqrt3mod4","c1","sqrt5mod8","nv","isNegativeLE","FIELD_FIELDS","validateField","initial","ORDER","MASK","BYTES","BITS","opts","reduce","FpPow","p","FpInvertBatch","nums","lastMultiplied","acc","is0","inverted","inv","reduceRight","nLength","nBitLength","_nBitLength","nByteLength","ceil","Field","redef","sqrtP","freeze","isOdd","lhs","rhs","div","sqrN","addN","subN","mulN","sqrt","invertBatch","cmov","fromBytes","getFieldBytesLength","fieldOrder","bitLength","getMinHashLength","mapHashToField","key","fieldLen","minLen","reduced","constTimeNegate","condition","negate","validateW","W","bits","calcWOpts","windows","windowSize","validateMSMPoints","points","forEach","validateMSMScalars","scalars","pointPrecomputes","pointWindowSizes","getW","wNAF","hasPrecomputes","elm","unsafeLadder","double","precomputeWindow","base","window","precomputes","BASE","mask","maxNumber","shiftBy","wbits","offset1","offset2","cond1","cond2","wNAFUnsafe","curr","getPrecomputes","transform","comp","wNAFCached","wNAFCachedUnsafe","prev","setWindowSize","delete","pippenger","fieldN","zero","buckets","lastBits","scalar","resI","sumI","validateBasic","curve","Gx","Gy","VERIFY_DEFAULT","zip215","validateOpts","ut.validateObject","adjustScalarBytes","domain","uvRatio","mapToCurve","twistedEdwards","curveDef","CURVE","CURVE_ORDER","prehash","cHash","cofactor","modP","Fn","ctx","phflag","aCoordinate","ut.aInRange","assertPoint","other","Point","toAffineMemo","iz","ex","ey","ez","z","ax","ay","zz","assertValidMemo","X","Y","et","T","X2","Y2","Z2","Z4","aX2","left","right","XY","ZT","toAffine","static","toInv","fromAffine","_setWindowSize","wnaf","assertValidity","X1","Y1","Z1","X1Z2","X2Z1","Y1Z2","Y2Z1","B","C","D","x1y1","G","H","X3","Y3","T3","Z3","T1","T2","subtract","normalizeZ","multiply","multiplyUnsafe","I","isSmallOrder","isTorsionFree","clearCofactor","normed","lastByte","ut.bytesToNumberLE","y2","isXOdd","isLastByteOdd","privKey","getExtendedPublicKey","point","toRawBytes","ut.numberToBytesLE","toHex","ut.bytesToHex","modN","modN_LE","hashed","head","prefix","pointBytes","getPublicKey","hashDomainToScalar","context","msgs","ut.concatBytes","sign","options","R","verifyOpts","verify","sig","publicKey","SB","fromHex","RkA","utils","randomPrivateKey","precompute","ExtendedPoint","ED25519_P","ED25519_SQRT_M1","ed25519_pow_2_252_3","_10n","_20n","_40n","_80n","x2","b2","b4","b5","b10","b20","b40","b80","b160","b240","b250","pow_p_5_8","v3","v7","vx2","root1","root2","useRoot1","useRoot2","noRoot","ed25519Defaults","ed25519","generatePrivateKey","generateKeypair","privateScalar","secretKey","isOnCurve","toBuffer","module","assert","inherits","ctor","superCtor","super_","TempCtor","BN","endian","isBN","negative","words","red","_init","wordSize","cmp","init","_initNumber","_initArray","_parseHex","_parseBase","toArray","w","off","_strip","parseHex4Bits","index","parseHexByte","lowerBound","parseLength","parseBase","limbLen","limbPow","total","imuln","_iaddn","dest","move","_move","_expand","strip","_normSign","for","zeros","groupSizes","groupBases","padding","carry","groupSize","groupBase","isZero","modrn","idivn","toNumber","toArrayLike","allocate","ArrayType","reqLength","postfix","_toArrayLikeLE","position","_toArrayLikeBE","clz32","_countBits","t","_zeroBits","toBitArray","bit","wbit","zeroBits","toTwos","width","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","iadd","isub","smallMulTo","self","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","bl2","bh2","b3","bl3","bh3","bl4","bh4","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","imul","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","mulTo","mulf","isNegNum","muln","isqr","iushln","carryMask","newCarry","ishln","iushrn","hint","extended","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","bhiBits","qj","divmod","positive","divn","umod","divRound","dm","half","r2","andln","modn","egcd","isEven","yp","xp","im","jm","_invmp","x1","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","ireduce","rlen","imulK","K256","next","P224","P192","P25519","_prime","prime","imod","mod3","one","nOne","lpow","wnd","current","currentLen","mont","Mont","rinv","minv","copyProps","SafeBuffer","_Buffer","ALPHABET","BASE_MAP","charAt","xc","LEADER","FACTOR","iFACTOR","source","zeroes","pbegin","pend","b58","it1","it2","repeat","decodeUnsafe","psz","b256","charCode","it3","it4","vch","decode","basex","bs58","u32","byteSwap","byteSwap32","SHA256_K","SHA256_IV","SHA256_W","SHA256","W15","W2","s0","s1","sigma1","sigma0","sha256","ToDictionary","stringToCodePoints","codePointsToString","code_points","cp","end_of_stream","Stream","tokens","endOfStream","prepend","token","unshift","pop","decoderError","fatal","opt_code_point","DEFAULT_ENCODING","TextDecoder","_streaming","_BOMseen","_decoder","_fatal","Boolean","_ignoreBOM","UTF8Decoder","input_stream","handler","_encoder","_options","opt_string","UTF8Encoder","utf8_code_point","utf8_bytes_seen","utf8_bytes_needed","utf8_lower_boundary","utf8_upper_boundary","stream","bite","code_point","count","temp","encoding_lib","__createBinding","k2","__setModuleDefault","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","__importStar","__esModule","hasOwnProperty","__importDefault","default","lib","deserializeUnchecked","deserialize","serialize","BinaryWriter","BorshError","baseDecode","bn_js_1","bs58_1","require$$2","ResolvedTextDecoder","textDecoder","baseEncode","INITIAL_LENGTH","fieldPath","originalMessage","addToFieldPath","splice","maybeResize","writeU8","writeU16","writeU32","writeU64","writeBuffer","writeU128","writeU256","writeU512","writeString","writeFixedArray","writeArray","elem","handlingRangeError","propertyKey","propertyDescriptor","originalMethod","BinaryReader","readU8","readU16","readU32","readU64","readBuffer","readU128","readU256","readU512","readString","readFixedArray","readArray","capitalizeFirstLetter","toUpperCase","serializeField","schema","fieldType","writer","kind","serializeStruct","borshSerialize","structSchema","fields","idx","values","Writer","deserializeField","reader","option","Map","deserializeStruct","classType","borshDeserialize","fieldValue","Reader","Struct$1","Struct","properties","assign","SOLANA_SCHEMA","Enum","enum","keys","MAX_SEED_LENGTH","PUBLIC_KEY_LENGTH","isPublicKeyData","_bn","uniquePublicKeyCounter","PublicKey","decoded","toBase58","zeroPad","toStringTag","fromPublicKey","programId","publicKeyBytes","seeds","createProgramAddressSync","nonce","address","seedsWithNonce","err","findProgramAddressSync","pubkeyData","pubkey","_PublicKey","Account","_publicKey","_secretKey","secretKeyBuffer","BPF_LOADER_DEPRECATED_PROGRAM_ID","Layout_1","s16","nu64be","u48be","u40be","u32be","u16be","nu64","u40","u24","u16","greedy","Constant","UTF8","Blob","BitStructure","VariantLayout","Union","UnionLayoutDiscriminator","Structure","Sequence","DoubleBE","Double","Float","NearInt64BE","NearUInt64BE","NearUInt64","IntBE","Int","UInt","OffsetLayout","GreedyCount","ExternalLayout","nameWithProperty","Layout","uint8ArrayToBuffer","checkUint8Array","constant","cstr","blob","unionLayoutDiscriminator","union","struct","f64","f32be","f32","ns64be","s40be","s32be","s24be","s16be","s48","s40","s32","s24","buffer_1","Layout$1","span","property","makeDestinationObject","getSpan","replicate","rv","fromArray","bindConstructorLayout","Class","layout","layout_","boundConstructor_","isCount","elementSpan","rem","UIntBE","V2E32","divmodInt64","hi32","lo32","roundedInt64","NearInt64","FloatBE","elementLayout","elo","decodePrefixes","fd","fsp","firstOffset","lastOffset","lastWrote","fv","layoutFor","offsetOf","UnionDiscriminator","discr","defaultLayout","discriminator","usesPrefixDiscriminator","registry","boundGetSourceVariant","defaultGetSourceVariant","bind","getSourceVariant","configGetSourceVariant","gsv","vlo","getVariant","tag","dlo","clo","contentOffset","addVariant","variant","vb","fixBitwiseResult","msb","_packedSetValue","_packedGetValue","addField","bf","BitField","addBoolean","fieldFor","container","totalBits","usedBits","valueMask","wordMask","wordValue","srcBuffer","CString","srcb","maxSpan","u8","u48","u24be","s8","ns64","s48be","f64be","seq","utf8","PACKET_DATA_SIZE","VERSION_PREFIX_MASK","SIGNATURE_LENGTH_IN_BYTES","TransactionExpiredBlockheightExceededError","signature","TransactionExpiredTimeoutError","timeoutSeconds","toFixed","TransactionExpiredNonceInvalidError","MessageAccountKeys","staticAccountKeys","accountKeysFromLookups","keySegments","readonly","keySegment","flat","compileInstructions","instructions","U8_MAX","keyIndexMap","findKeyIndex","keyIndex","instruction","programIdIndex","accountKeyIndexes","meta","BufferLayout","rustString","rsl","_decode","_encode","rslShim","chars","authorized","lockup","voteInit","voteAuthorizeWithSeedArgs","getAlloc","getItemAlloc","decodeLength","encodeLength","rem_len","assert$1","CompiledKeys","payer","keyMetaMap","getOrInsertDefault","keyMeta","isSigner","isWritable","isInvoked","payerKeyMeta","ix","accountMeta","getMessageComponents","mapEntries","writableSigners","filter","readonlySigners","writableNonSigners","readonlyNonSigners","header","numRequiredSignatures","numReadonlySignedAccounts","numReadonlyUnsignedAccounts","payerAddress","extractTableLookup","lookupTable","writableIndexes","drainedWritableKeys","drainKeysFoundInLookupTable","addresses","readonlyIndexes","drainedReadonlyKeys","accountKey","lookupTableEntries","keyMetaFilter","lookupTableIndexes","drainedKeys","lookupTableIndex","findIndex","entry","END_OF_BUFFER_ERROR_MESSAGE","guardedShift","guardedSplice","Message","accountKeys","recentBlockhash","indexToProgramIds","account","version","compiledInstructions","accounts","addressTableLookups","getAccountKeys","compiledKeys","compile","payerKey","isAccountSigner","isAccountWritable","numSignedAccounts","unsignedAccountIndex","numUnsignedAccounts","numWritableUnsignedAccounts","numWritableSignedAccounts","isProgramId","has","programIds","nonProgramIds","numKeys","keyCount","shortvec","keyIndicesCount","dataCount","keyIndices","dataLength","instructionCount","instructionBuffer","instructionBufferLength","instructionLayout","signDataLayout","transaction","signData","accountCount","dataSlice","messageArgs","MessageV0","numAccountKeysFromLookups","addressLookupTableAccounts","resolveAddressTableLookups","numStaticAccountKeys","lookupAccountKeysIndex","numWritableLookupAccountKeys","tableLookup","tableAccount","find","lookupTableAccounts","extractResult","addressTableLookup","encodedStaticAccountKeysLength","serializedInstructions","serializeInstructions","encodedInstructionsLength","serializedAddressTableLookups","serializeAddressTableLookups","encodedAddressTableLookupsLength","messageLayout","serializedMessage","MESSAGE_VERSION_0_PREFIX","serializedMessageLength","staticAccountKeysLength","instructionsLength","addressTableLookupsLength","serializedLength","encodedAccountKeyIndexesLength","encodedDataLength","encodedWritableIndexesLength","encodedReadonlyIndexesLength","addressTableLookupLayout","maskedPrefix","accountKeyIndexesLength","addressTableLookupsCount","writableIndexesLength","readonlyIndexesLength","VersionedMessage","deserializeMessageVersion","TransactionStatus","DEFAULT_SIGNATURE","TransactionInstruction","Transaction","signatures","feePayer","lastValidBlockHeight","nonceInfo","minNonceContextSlot","_message","_json","minContextSlot","blockhash","nonceInstruction","signers","items","compileMessage","JSON","stringify","warn","accountMetas","uniqueMetas","pubkeyString","uniqueIndex","sort","localeMatcher","usage","sensitivity","ignorePunctuation","numeric","caseFirst","localeCompare","feePayerIndex","payerMeta","signedKeys","unsignedKeys","invariant","_compile","valid","every","pair","serializeMessage","async","connection","getFeeForMessage","setSigners","seen","Set","uniqueSigners","signer","_partialSign","partialSign","_addSignature","addSignature","sigpair","verifySignatures","requireAllSignatures","signatureErrors","_getMessageSignednessErrors","missing","invalid","config","sigErrors","errorMessage","_serialize","signatureCount","transactionLength","wireTransaction","keyObj","populate","sigPubkeyPair","some","TransactionMessage","compiledIx","compileToLegacyMessage","compileToV0Message","VersionedTransaction","defaultSignatures","encodedSignaturesLength","transactionLayout","serializedTransaction","serializedTransactionLength","signaturesLength","messageData","signerPubkeys","signerIndex","NUM_TICKS_PER_SECOND","DEFAULT_TICKS_PER_SLOT","NUM_SLOTS_PER_SECOND","MS_PER_SLOT","SYSVAR_CLOCK_PUBKEY","SYSVAR_EPOCH_SCHEDULE_PUBKEY","SYSVAR_INSTRUCTIONS_PUBKEY","SYSVAR_RECENT_BLOCKHASHES_PUBKEY","SYSVAR_RENT_PUBKEY","SYSVAR_REWARDS_PUBKEY","SYSVAR_SLOT_HASHES_PUBKEY","SYSVAR_SLOT_HISTORY_PUBKEY","SYSVAR_STAKE_HISTORY_PUBKEY","SendTransactionError","action","transactionMessage","logs","maybeLogsOutput","guideText","transactionLogs","transactionError","cachedLogs","Promise","resolve","reject","getTransaction","then","tx","logMessages","catch","SolanaJSONRPCErrorCode","JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP","JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE","JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE","JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE","JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY","JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE","JSON_RPC_SERVER_ERROR_SLOT_SKIPPED","JSON_RPC_SERVER_ERROR_NO_SNAPSHOT","JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED","JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX","JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE","JSON_RPC_SCAN_ERROR","JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH","JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET","JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION","JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED","SolanaJSONRPCError","customMessage","sendAndConfirmTransaction","sendOptions","skipPreflight","preflightCommitment","commitment","maxRetries","sendTransaction","status","confirmTransaction","abortSignal","nonceAccountPubkey","nonceValue","sleep","ms","setTimeout","encodeData","allocLength","layoutFields","decodeData","FeeCalculatorLayout","NonceAccountLayout","NONCE_ACCOUNT_LENGTH","NonceAccount","authorizedPubkey","feeCalculator","nonceAccount","SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY","SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH","SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH","SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH","SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH","SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE","encodeValue","commaSeparatedValues","encodeURIComponent","getPrototypeOf","encodeObjectContextEntry","encodeContextObject","searchParamsString","btoa","getErrorMessage","decodingAdviceMessage","SolanaError","cause","contextAndErrorOptions","errorOptions","contextRest","__code","getEncodedSize","encoder","fixedSize","getSizeFromValue","createEncoder","createDecoder","decoder","isFixedSize","codec","combineCodec","decoderFixedSize","encoderFixedSize","maxSize","decoderMaxSize","encoderMaxSize","assertByteArrayIsNotEmptyForCodec","codecDescription","assertByteArrayHasEnoughBytesForCodec","expected","assertNumberIsBetweenForCodec","isLittleEndian","numberEncoderFactory","arrayBuffer","numberDecoderFactory","toArrayBuffer","bytesOffset","getU64Encoder","getU64Decoder","getBigUint64","getU64Codec","bigIntLayout","bigInt","SystemInstruction","checkProgramId","instructionTypeLayout","typeIndex","ixType","SYSTEM_INSTRUCTION_LAYOUTS","checkKeyLength","lamports","space","Create","fromPubkey","newAccountPubkey","Transfer","toPubkey","TransferWithSeed","basePubkey","Allocate","accountPubkey","AllocateWithSeed","Assign","AssignWithSeed","CreateWithSeed","InitializeNonceAccount","noncePubkey","AdvanceNonceAccount","WithdrawNonceAccount","AuthorizeNonceAccount","newAuthorizedPubkey","SystemProgram","UpgradeNonceAccount","params","createAccountWithSeed","createAccount","initParams","nonceInitialize","instructionData","CHUNK_SIZE","Loader","chunkSize","program","balanceNeeded","getMinimumBalanceForRentExemption","programInfo","getAccountInfo","executable","owner","transfer","dataLayout","transactions","bytesLengthPadding","_rpcEndpoint","REQUESTS_PER_SECOND","all","deployCommitment","finalizeSignature","currentSlot","getSlot","slot","round","BPF_LOADER_PROGRAM_ID","BpfLoader","getMinNumSignatures","elf","loaderProgramId","load","objToString","objKeys","isArrayProp","propVal","toStr","fastStableStringify","returnVal","StructError","failure","failures","cached","explanation","rest","path","isIterable","isObject","iterator","isNonArrayObject","print","shiftIterator","done","toFailure","branch","refinement","toFailures","run","coerce","coercer","validator","ts","refiner","props","is","validate","tuples","tuple","define","any","Element","literal","description","never","nullable","optional","record","Key","Value","Structs","Never","coerced","unknown","rnds8","rng","msCrypto","REGEX","uuid","test","byteToHex","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","node","clockseq","seedBytes","random","msecs","Date","now","nsecs","dt","tl","tmh","parse","stringToBytes","unescape","DNS","URL","v35","hashfunc","generateUUID","namespace","md5","md5ToHexEncodedArray","wordsToMd5","bytesToWords","length32","hexTab","getOutputLength","inputLength8","olda","oldb","oldc","oldd","md5ff","md5gg","md5hh","md5ii","safeAdd","length8","lsw","msw","bitRotateLeft","cnt","md5cmn","v4","rnds","ROTL","sha1","K","N","M","_i","_i2","_t","_t2","v5","nil","generateRequest","method","id","request","jsonrpc","generator","notificationIdNull","generateRequest_1","ClientBrowser","callServer","reviver","replacer","browser","callback","isBatch","isRaw","hasCallback","response","_parseResponse","responseText","isError","isNotError","MINIMUM_SLOT_PER_EPOCH","trailingZeros","nextPowerOfTwo","EpochSchedule","slotsPerEpoch","leaderScheduleSlotOffset","warmup","firstNormalEpoch","firstNormalSlot","getEpoch","getEpochAndSlotIndex","epoch","epochLen","getSlotsInEpoch","slotIndex","normalSlotIndex","normalEpochIndex","getFirstSlotInEpoch","getLastSlotInEpoch","fetch","Events","__proto__","EE","once","addListener","emitter","event","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","eventNames","names","events","getOwnPropertySymbols","listeners","handlers","ee","listenerCount","emit","removeListener","on","removeAllListeners","prefixed","WebSocketBrowserImpl","socket","protocols","WebSocket","onopen","onmessage","onerror","onclose","reason","send","optionsOrCallback","cb","close","addEventListener","DefaultDataPack","CommonClient","rpc_id","queue","autoconnect","ready","reconnect","reconnect_timer_id","reconnect_interval","max_reconnects","rest_options","current_reconnects","generate_request_id","webSocketFactory","dataPack","_connect","connect","timeout","ws_opts","promise","resp","notify","setAutoReconnect","setReconnectInterval","interval","setMaxReconnects","clearTimeout","notification","RpcWebSocketClient","url","rpc","createRpc","underlyingSocket","readyState","LOOKUP_TABLE_META_SIZE","AddressLookupTableAccount","isActive","U64_MAX","deactivationSlot","accountData","LookupTableMetaLayout","serializedAddressesLen","numSerializedAddresses","lastExtendedSlot","lastExtendedSlotStartIndex","lastExtendedStartIndex","authority","URL_RE","makeWebsocketUrl","endpoint","matches","match","hostish","portWithColon","protocol","startsWith","startPort","websocketPort","PublicKeyFromString","RawAccountDataResult","BufferFromRawAccountData","BLOCKHASH_CACHE_TIMEOUT_MS","assertEndpointUrl","putativeUrl","extractCommitmentFromConfig","commitmentOrConfig","specifiedCommitment","specifiedConfig","applyDefaultMemcmpEncodingToFilters","filters","memcmp","createRpcResult","pick","UnknownRpcResult","jsonRpcResult","jsonRpcResultAndContext","notificationResultAndContext","versionedMessageFromResponse","GetInflationGovernorResult","foundation","foundationTerm","taper","terminal","GetInflationRewardResult","effectiveSlot","amount","postBalance","commission","GetRecentPrioritizationFeesResult","prioritizationFee","GetInflationRateResult","GetEpochInfoResult","slotsInEpoch","absoluteSlot","blockHeight","transactionCount","GetEpochScheduleResult","GetLeaderScheduleResult","TransactionErrorResult","SignatureStatusResult","SignatureReceivedResult","VersionResult","ParsedInstructionStruct","PartiallyDecodedInstructionStruct","SimulatedTransactionResponseStruct","rentEpoch","unitsConsumed","returnData","innerInstructions","BlockProductionResponseStruct","byIdentity","firstSlot","lastSlot","createRpcClient","httpHeaders","customFetch","fetchMiddleware","disableRetryOnRateLimit","httpAgent","fetchImpl","agent","fetchWithMiddleware","info","modifiedFetchArgs","modifiedInfo","modifiedInit","clientBrowser","RpcClient","body","headers","COMMON_HTTP_HEADERS","too_many_requests_retries","waitTime","statusText","text","ok","createRpcRequest","client","createRpcBatchRequest","requests","batch","methodName","GetInflationGovernorRpcResult","GetInflationRateRpcResult","GetRecentPrioritizationFeesRpcResult","GetEpochInfoRpcResult","GetEpochScheduleRpcResult","GetLeaderScheduleRpcResult","SlotRpcResult","GetSupplyRpcResult","circulating","nonCirculating","nonCirculatingAccounts","TokenAmountResult","uiAmount","decimals","uiAmountString","GetTokenLargestAccountsResult","GetTokenAccountsByOwner","ParsedAccountDataResult","GetParsedTokenAccountsByOwner","GetLargestAccountsRpcResult","AccountInfoResult","KeyedAccountInfoResult","ParsedOrRawAccountData","ParsedAccountInfoResult","KeyedParsedAccountInfoResult","StakeActivationResult","active","inactive","GetConfirmedSignaturesForAddress2RpcResult","memo","blockTime","GetSignaturesForAddressRpcResult","AccountNotificationResult","subscription","ProgramAccountInfoResult","ProgramAccountNotificationResult","SlotInfoResult","parent","SlotNotificationResult","SlotUpdateResult","timestamp","stats","numTransactionEntries","numSuccessfulTransactions","numFailedTransactions","maxTransactionsPerEntry","SlotUpdateNotificationResult","SignatureNotificationResult","RootNotificationResult","ContactInfoResult","gossip","tpu","VoteAccountInfoResult","votePubkey","nodePubkey","activatedStake","epochVoteAccount","epochCredits","lastVote","rootSlot","GetVoteAccounts","delinquent","ConfirmationStatus","SignatureStatusResponse","confirmations","confirmationStatus","GetSignatureStatusesRpcResult","GetMinimumBalanceForRentExemptionRpcResult","AddressTableLookupStruct","ConfirmedTransactionResult","AnnotatedAccountKey","ConfirmedTransactionAccountsModeResult","ParsedInstructionResult","RawInstructionResult","InstructionResult","UnknownInstructionResult","ParsedOrRawInstruction","ParsedConfirmedTransactionResult","TokenBalanceResult","accountIndex","mint","uiTokenAmount","LoadedAddressesResult","ConfirmedTransactionMetaResult","fee","preBalances","postBalances","preTokenBalances","postTokenBalances","loadedAddresses","computeUnitsConsumed","costUnits","ParsedConfirmedTransactionMetaResult","TransactionVersionStruct","RewardsResult","rewardType","GetBlockRpcResult","previousBlockhash","parentSlot","rewards","GetNoneModeBlockRpcResult","GetAccountsModeBlockRpcResult","GetParsedBlockRpcResult","GetParsedAccountsModeBlockRpcResult","GetParsedNoneModeBlockRpcResult","GetConfirmedBlockRpcResult","GetBlockSignaturesRpcResult","GetTransactionRpcResult","GetParsedTransactionRpcResult","GetLatestBlockhashRpcResult","IsBlockhashValidRpcResult","PerfSampleResult","numTransactions","numSlots","samplePeriodSecs","GetRecentPerformanceSamplesRpcResult","GetFeeCalculatorRpcResult","lamportsPerSignature","RequestAirdropRpcResult","SendTransactionRpcResult","LogsResult","LogsNotificationResult","Connection","_commitment","_confirmTransactionInitialTimeout","_rpcWsEndpoint","_rpcClient","_rpcRequest","_rpcBatchRequest","_rpcWebSocket","_rpcWebSocketConnected","_rpcWebSocketHeartbeat","_rpcWebSocketIdleTimeout","_rpcWebSocketGeneration","_disableBlockhashCaching","_pollingBlockhash","_blockhashInfo","latestBlockhash","lastFetch","transactionSignatures","simulatedSignatures","_nextClientSubscriptionId","_subscriptionDisposeFunctionsByClientSubscriptionId","_subscriptionHashByClientSubscriptionId","_subscriptionStateChangeCallbacksByHash","_subscriptionCallbacksByServerSubscriptionId","_subscriptionsByHash","_subscriptionsAutoDisposedByRpc","getBlockHeight","requestPromises","_buildArgs","requestHash","unsafeRes","wsEndpoint","confirmTransactionInitialTimeout","_wsOnOpen","_wsOnError","_wsOnClose","_wsOnAccountNotification","_wsOnProgramAccountNotification","_wsOnSlotNotification","_wsOnSlotUpdatesNotification","_wsOnSignatureNotification","_wsOnRootNotification","_wsOnLogsNotification","rpcEndpoint","getBalanceAndContext","configArg","tokenMintAddress","tokenAddress","ownerAddress","_args","mintAddress","getAccountInfoAndContext","publicKeys","rawConfig","getMultipleAccountsInfoAndContext","configOrCommitment","configWithoutEncoding","baseSchema","withContext","strategy","rawSignature","aborted","decodedSignature","confirmTransactionUsingLegacyTimeoutStrategy","confirmTransactionUsingBlockHeightExceedanceStrategy","confirmTransactionUsingDurableNonceStrategy","getCancellationPromise","signal","getTransactionConfirmationPromise","signatureSubscriptionId","disposeSignatureSubscriptionStateChangeObserver","confirmationPromise","onSignature","__type","PROCESSED","subscriptionSetupPromise","resolveSubscriptionSetup","_onSubscriptionStateChange","nextState","getSignatureStatus","abortConfirmation","removeSignatureListener","expiryPromise","checkBlockHeight","_e","currentBlockHeight","BLOCKHEIGHT_EXCEEDED","cancellationPromise","outcome","race","currentNonceValue","lastCheckedSlot","getCurrentNonceValue","getNonceAndContext","NONCE_INVALID","slotInWhichNonceDidAdvance","signatureStatus","commitmentForStatus","timeoutId","timeoutMs","TIMED_OUT","startSlot","getSignatureStatuses","getSupply","excludeNonCirculatingAccountsList","epochSchedule","getLatestBlockhashAndContext","wireMessage","lockedWritableAccounts","getRecentBlockhashAndContext","_buildArgsAtLeastConfirmed","transactionDetails","extra","block","endSlot","firstAvailableBlock","getFirstAvailableBlock","getConfirmedBlockSignatures","until","highestConfirmedRoot","before","confirmedSignatureInfo","getConfirmedSignaturesForAddress2","accountInfo","fromAccountData","disableCache","timeSinceFetch","expired","_pollNewBlockhash","startTime","cachedLatestBlockhash","cachedBlockhash","getLatestBlockhash","transactionOrMessage","configOrSigners","includeAccounts","versionedTx","encodedTransaction","originalTx","_blockhashWithExpiryBlockHeight","sigVerify","traceIndent","logTrace","signersOrOptions","sendRawTransaction","rawTransaction","sendEncodedTransaction","setInterval","_updateSubscriptions","MAX_SAFE_INTEGER","clearInterval","_setSubscription","nextSubscription","prevState","stateChangeCallbacks","clientSubscriptionId","activeWebSocketGeneration","isCurrentConnectionStillActive","callbacks","serverSubscriptionId","unsubscribeMethod","_handleServerNotification","callbackArgs","_makeSubscription","subscriptionConfig","existingSubscription","onAccountChange","_unsubscribeClientSubscription","accountId","onProgramAccountChange","maybeFilters","onLogs","mentions","onSlotChange","onSlotUpdate","subscriptionName","dispose","override","_err","onSignatureWithOptions","onRootChange","Keypair","keypair","_keypair","skipValidation","computedPublicKey","ii","LOOKUP_TABLE_INSTRUCTION_LAYOUTS","CreateLookupTable","bigintLayout","FreezeLookupTable","ExtendLookupTable","DeactivateLookupTable","CloseLookupTable","AddressLookupTableInstruction","layoutType","checkKeysLength","recentSlot","recipient","AddressLookupTableProgram","lookupTableAddress","bumpSeed","addr","ComputeBudgetInstruction","COMPUTE_BUDGET_INSTRUCTION_LAYOUTS","additionalFee","RequestUnits","RequestHeapFrame","SetComputeUnitLimit","microLamports","SetComputeUnitPrice","ComputeBudgetProgram","PRIVATE_KEY_BYTES","PUBLIC_KEY_BYTES","SIGNATURE_BYTES","ED25519_INSTRUCTION_LAYOUT","Ed25519Program","instructionIndex","publicKeyOffset","signatureOffset","messageDataOffset","numSignatures","signatureInstructionIndex","publicKeyInstructionIndex","messageDataSize","messageInstructionIndex","privateKey","fromSecretKey","createInstructionWithPublicKey","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_7n","_256n","_0x71n","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlL","keccakP","rounds","idx1","idx0","B0","B1","Th","Tl","curH","curL","PI","Keccak","suffix","enableXOF","posOut","state32","keccak","finish","writeInto","bufferOut","xofInto","xof","keccak_256","HMAC","_key","iHash","oHash","hmac","validateSigVerOpts","lowS","validatePointOpts","allowedPrivateKeyLengths","wrapPrivateKey","allowInfinityPoint","endo","beta","splitScalar","b2n","h2b","ut","DER","Err","DERErr","_tlv","dataLen","ut.numberToHexUnpadded","lenLen","isLong","lengthBytes","_int","toSig","int","tlv","ut.abytes","seqBytes","seqLeftBytes","rBytes","rLeftBytes","sBytes","sLeftBytes","hexFromSig","rs","ss","weierstrassPoints","mod.Field","_c","_isCompressed","tail","weierstrassEquation","x3","isWithinCurveOrder","ut.inRange","normPrivateKeyToScalar","ut.isBytes","ut.bytesToNumberBE","mod.mod","assertPrjPoint","px","py","pz","hasEvenY","U1","U2","t0","t1","t3","t4","t5","sc","k1neg","k1","k2neg","k1p","k2p","fake","f1p","f2p","multiplyAndAddUnsafe","isCompressed","_bits","ProjectivePoint","bits2int","bits2int_modN","weierstrass","compressedLen","uncompressedLen","invN","mod.invert","cat","sqrtError","isYOdd","isHeadOdd","cl","ul","numToNByteStr","ut.numberToBytesBE","isBiggerThanHalfOrder","HALF","normalizeS","slcNum","Signature","recovery","addRecoveryBit","recoverPublicKey","msgHash","rec","radj","ir","u1","u2","hasHighS","toDERRawBytes","ut.hexToBytes","toDERHex","toCompactRawBytes","toCompactHex","isValidPrivateKey","mod.getMinHashLength","mod.mapHashToField","fromPrivateKey","isProbPub","getSharedSecret","privateA","publicB","ORDER_MASK","ut.bitMask","int2octets","prepSig","defaultSigOpts","extraEntropy","ent","h1int","seedArgs","k2sig","kBytes","ik","normS","defaultVerOpts","drbg","ut.createHmacDrbg","sg","format","isHex","isObj","_sig","fromDER","derError","fromCompact","getHash","createCurve","defHash","secp256k1P","secp256k1N","divNearest","sqrtMod","_6n","_11n","_22n","_23n","_44n","_88n","b11","b22","b44","b88","b176","b220","b223","Fpk1","secp256k1","POW_2_128","c2","ecdsaSign","publicKeyCreate","ETHEREUM_ADDRESS_BYTES","SIGNATURE_OFFSETS_SERIALIZED_SIZE","SECP256K1_INSTRUCTION_LAYOUT","Secp256k1Program","recoveryId","createInstructionWithEthAddress","ethAddress","publicKeyToEthAddress","rawAddress","dataStart","ethAddressOffset","ethAddressInstructionIndex","pkey","messageHash","STAKE_CONFIG_ID","Authorized","staker","withdrawer","Lockup","unixTimestamp","custodian","_Lockup","StakeInstruction","STAKE_INSTRUCTION_LAYOUTS","Initialize","stakePubkey","Delegate","newAuthorized","stakeAuthorizationType","Authorize","custodianPubkey","authoritySeed","authorityOwner","AuthorizeWithSeed","authorityBase","Split","splitStakePubkey","Merge","sourceStakePubKey","Withdraw","Deactivate","StakeProgram","StakeAuthorizationLayout","Staker","Withdrawer","maybeLockup","initialize","rentExemptReserve","splitInstruction","VoteInit","authorizedVoter","authorizedWithdrawer","VoteInstruction","VOTE_INSTRUCTION_LAYOUTS","InitializeAccount","voteAuthorizationType","currentAuthorityDerivedKeyOwnerPubkey","currentAuthorityDerivedKeySeed","currentAuthorityDerivedKeyBasePubkey","authorizedWithdrawerPubkey","VoteProgram","UpdateValidatorIdentity","VoteAuthorizationLayout","Voter","initializeAccount","currentVoteAccountBalance","rentExemptMinimum","withdraw","VALIDATOR_INFO_KEY","InfoString","website","details","iconUrl","keybaseUsername","ValidatorInfo","configKeyCount","configKeys","rawInfo","assertType","VOTE_PROGRAM_ID","VoteAccountLayout","LayoutExports","VoteAccount","votes","authorizedVoters","priorVoters","lastTimestamp","versionOffset","va","rootSlotValid","parseAuthorizedVoter","getPriorVoters","parsePriorVoters","epochOfLastAuthorizedSwitch","targetEpoch","isEmpty","http","devnet","testnet","https","clusterApiUrl","cluster","tls","sendAndConfirmRawTransaction","confirmationStrategyOrConfirmOptions","maybeConfirmOptions","confirmationStrategy","LAMPORTS_PER_SOL"],"mappings":"8xBAEAA,SAAAC,WAAqBA,WACrBD,SAAAE,YAAsBA,YACtBF,SAAAG,cAAwBA,cAExB,IAAIC,OAAS,GACb,IAAIC,UAAY,GAChB,IAAIC,WAAaC,aAAe,YAAcA,WAAaC,MAE3D,IAAIC,KAAO,mEACX,IAAK,IAAIC,EAAI,EAAGC,IAAMF,KAAKG,OAAQF,EAAIC,MAAOD,EAAG,CAC/CN,OAAOM,GAAKD,KAAKC,GACjBL,UAAUI,KAAKI,WAAWH,IAAMA,EAKlCL,UAAU,IAAIQ,WAAW,IAAM,GAC/BR,UAAU,IAAIQ,WAAW,IAAM,GAE/B,SAASC,QAASC,KAChB,IAAIJ,IAAMI,IAAIH,OAEd,GAAID,IAAM,EAAI,EAAG,CACf,MAAM,IAAIK,MAAM,kDAKlB,IAAIC,SAAWF,IAAIG,QAAQ,KAC3B,GAAID,YAAc,EAAGA,SAAWN,IAEhC,IAAIQ,gBAAkBF,WAAaN,IAC/B,EACA,EAAKM,SAAW,EAEpB,MAAO,CAACA,SAAUE,iBAIpB,SAASlB,WAAYc,KACnB,IAAIK,KAAON,QAAQC,KACnB,IAAIE,SAAWG,KAAK,GACpB,IAAID,gBAAkBC,KAAK,GAC3B,OAASH,SAAWE,iBAAmB,EAAI,EAAKA,gBAGlD,SAASE,YAAaN,IAAKE,SAAUE,iBACnC,OAASF,SAAWE,iBAAmB,EAAI,EAAKA,gBAGlD,SAASjB,YAAaa,KACpB,IAAIO,IACJ,IAAIF,KAAON,QAAQC,KACnB,IAAIE,SAAWG,KAAK,GACpB,IAAID,gBAAkBC,KAAK,GAE3B,IAAIG,IAAM,IAAIjB,IAAIe,YAAYN,IAAKE,SAAUE,kBAE7C,IAAIK,QAAU,EAGd,IAAIb,IAAMQ,gBAAkB,EACxBF,SAAW,EACXA,SAEJ,IAAIP,EACJ,IAAKA,EAAI,EAAGA,EAAIC,IAAKD,GAAK,EAAG,CAC3BY,IACGjB,UAAUU,IAAIF,WAAWH,KAAO,GAChCL,UAAUU,IAAIF,WAAWH,EAAI,KAAO,GACpCL,UAAUU,IAAIF,WAAWH,EAAI,KAAO,EACrCL,UAAUU,IAAIF,WAAWH,EAAI,IAC/Ba,IAAIC,WAAcF,KAAO,GAAM,IAC/BC,IAAIC,WAAcF,KAAO,EAAK,IAC9BC,IAAIC,WAAaF,IAAM,IAGzB,GAAIH,kBAAoB,EAAG,CACzBG,IACGjB,UAAUU,IAAIF,WAAWH,KAAO,EAChCL,UAAUU,IAAIF,WAAWH,EAAI,KAAO,EACvCa,IAAIC,WAAaF,IAAM,IAGzB,GAAIH,kBAAoB,EAAG,CACzBG,IACGjB,UAAUU,IAAIF,WAAWH,KAAO,GAChCL,UAAUU,IAAIF,WAAWH,EAAI,KAAO,EACpCL,UAAUU,IAAIF,WAAWH,EAAI,KAAO,EACvCa,IAAIC,WAAcF,KAAO,EAAK,IAC9BC,IAAIC,WAAaF,IAAM,IAGzB,OAAOC,IAGT,SAASE,gBAAiBC,KACxB,OAAOtB,OAAOsB,KAAO,GAAK,IACxBtB,OAAOsB,KAAO,GAAK,IACnBtB,OAAOsB,KAAO,EAAI,IAClBtB,OAAOsB,IAAM,IAGjB,SAASC,YAAaC,MAAOC,MAAOC,KAClC,IAAIR,IACJ,IAAIS,OAAS,GACb,IAAK,IAAIrB,EAAImB,MAAOnB,EAAIoB,IAAKpB,GAAK,EAAG,CACnCY,KACIM,MAAMlB,IAAM,GAAM,WAClBkB,MAAMlB,EAAI,IAAM,EAAK,QACtBkB,MAAMlB,EAAI,GAAK,KAClBqB,OAAOC,KAAKP,gBAAgBH,MAE9B,OAAOS,OAAOE,KAAK,IAGrB,SAAS9B,cAAeyB,OACtB,IAAIN,IACJ,IAAIX,IAAMiB,MAAMhB,OAChB,IAAIsB,WAAavB,IAAM,EACvB,IAAIwB,MAAQ,GACZ,IAAIC,eAAiB,MAGrB,IAAK,IAAI1B,EAAI,EAAG2B,KAAO1B,IAAMuB,WAAYxB,EAAI2B,KAAM3B,GAAK0B,eAAgB,CACtED,MAAMH,KAAKL,YAAYC,MAAOlB,EAAIA,EAAI0B,eAAkBC,KAAOA,KAAQ3B,EAAI0B,iBAI7E,GAAIF,aAAe,EAAG,CACpBZ,IAAMM,MAAMjB,IAAM,GAClBwB,MAAMH,KACJ5B,OAAOkB,KAAO,GACdlB,OAAQkB,KAAO,EAAK,IACpB,KAEN,MAAS,GAAIY,aAAe,EAAG,CAC3BZ,KAAOM,MAAMjB,IAAM,IAAM,GAAKiB,MAAMjB,IAAM,GAC1CwB,MAAMH,KACJ5B,OAAOkB,KAAO,IACdlB,OAAQkB,KAAO,EAAK,IACpBlB,OAAQkB,KAAO,EAAK,IACpB,KAIJ,OAAOa,MAAMF,KAAK,GACpB;oMCpJYK,QAAAC,KAAG,SAAUC,OAAQC,OAAQC,KAAMC,KAAMC,QACnD,IAAIC,EAAGC,EACP,IAAIC,KAAQH,OAAS,EAAKD,KAAO,EACjC,IAAIK,MAAQ,GAAKD,MAAQ,EACzB,IAAIE,MAAQD,MAAQ,EACpB,IAAIE,OAAS,EACb,IAAIxC,EAAIgC,KAAQE,OAAS,EAAK,EAC9B,IAAIO,EAAIT,MAAQ,EAAI,EACpB,IAAIU,EAAIZ,OAAOC,OAAS/B,GAExBA,GAAKyC,EAELN,EAAIO,GAAM,IAAOF,OAAU,EAC3BE,KAAQF,MACRA,OAASH,KACT,KAAOG,MAAQ,EAAGL,EAAKA,EAAI,IAAOL,OAAOC,OAAS/B,GAAIA,GAAKyC,EAAGD,OAAS,EAAG,CAAA,CAE1EJ,EAAID,GAAM,IAAOK,OAAU,EAC3BL,KAAQK,MACRA,OAASP,KACT,KAAOO,MAAQ,EAAGJ,EAAKA,EAAI,IAAON,OAAOC,OAAS/B,GAAIA,GAAKyC,EAAGD,OAAS,EAAG,CAAA,CAE1E,GAAIL,IAAM,EAAG,CACXA,EAAI,EAAII,KACZ,MAAS,GAAIJ,IAAMG,KAAM,CACrB,OAAOF,EAAIO,KAAQD,GAAK,EAAI,GAAKE,QACrC,KAAS,CACLR,EAAIA,EAAIS,KAAKC,IAAI,EAAGb,MACpBE,EAAIA,EAAII,MAEV,OAAQG,GAAK,EAAI,GAAKN,EAAIS,KAAKC,IAAI,EAAGX,EAAIF,OAG5CL,QAAAmB,MAAgB,SAAUjB,OAAQkB,MAAOjB,OAAQC,KAAMC,KAAMC,QAC3D,IAAIC,EAAGC,EAAGa,EACV,IAAIZ,KAAQH,OAAS,EAAKD,KAAO,EACjC,IAAIK,MAAQ,GAAKD,MAAQ,EACzB,IAAIE,MAAQD,MAAQ,EACpB,IAAIY,GAAMjB,OAAS,GAAKY,KAAKC,IAAI,GAAI,IAAMD,KAAKC,IAAI,GAAI,IAAM,EAC9D,IAAI9C,EAAIgC,KAAO,EAAKE,OAAS,EAC7B,IAAIO,EAAIT,KAAO,GAAK,EACpB,IAAIU,EAAIM,MAAQ,GAAMA,QAAU,GAAK,EAAIA,MAAQ,EAAK,EAAI,EAE1DA,MAAQH,KAAKM,IAAIH,OAEjB,GAAII,MAAMJ,QAAUA,QAAUJ,SAAU,CACtCR,EAAIgB,MAAMJ,OAAS,EAAI,EACvBb,EAAIG,IACR,KAAS,CACLH,EAAIU,KAAKQ,MAAMR,KAAKS,IAAIN,OAASH,KAAKU,KACtC,GAAIP,OAASC,EAAIJ,KAAKC,IAAI,GAAIX,IAAM,EAAG,CACrCA,IACAc,GAAK,EAEP,GAAId,EAAII,OAAS,EAAG,CAClBS,OAASE,GAAKD,CACpB,KAAW,CACLD,OAASE,GAAKL,KAAKC,IAAI,EAAG,EAAIP,OAEhC,GAAIS,MAAQC,GAAK,EAAG,CAClBd,IACAc,GAAK,EAGP,GAAId,EAAII,OAASD,KAAM,CACrBF,EAAI,EACJD,EAAIG,IACV,MAAW,GAAIH,EAAII,OAAS,EAAG,CACzBH,GAAMY,MAAQC,EAAK,GAAKJ,KAAKC,IAAI,EAAGb,MACpCE,EAAIA,EAAII,KACd,KAAW,CACLH,EAAIY,MAAQH,KAAKC,IAAI,EAAGP,MAAQ,GAAKM,KAAKC,IAAI,EAAGb,MACjDE,EAAI,GAIR,KAAOF,MAAQ,EAAGH,OAAOC,OAAS/B,GAAKoC,EAAI,IAAMpC,GAAKyC,EAAGL,GAAK,IAAKH,MAAQ,EAAG,CAAA,CAE9EE,EAAKA,GAAKF,KAAQG,EAClBC,MAAQJ,KACR,KAAOI,KAAO,EAAGP,OAAOC,OAAS/B,GAAKmC,EAAI,IAAMnC,GAAKyC,EAAGN,GAAK,IAAKE,MAAQ,EAAG,CAAA,CAE7EP,OAAOC,OAAS/B,EAAIyC,IAAMC,EAAI,GAChC;;;;;;6HC1EA,MAAMc,OAA6BC,kBACnC,MAAM7B,QAA4B8B,iBAClC,MAAMC,2BACIC,SAAW,mBAAqBA,OAAO,SAAW,WACtDA,OAAO,OAAO,8BACd,KAENC,QAAAC,OAAiBA,OACjBD,QAAAE,WAAqBA,WACrBF,QAAAG,kBAA4B,GAE5B,MAAMC,aAAe,WACrBJ,QAAAK,WAAqBD,aAgBrBH,OAAOK,oBAAsBC,oBAE7B,IAAKN,OAAOK,4BAA8BE,UAAY,oBAC3CA,QAAQC,QAAU,WAAY,CACvCD,QAAQC,MACN,4EACA,wEAIJ,SAASF,oBAEP,IACE,MAAMvD,IAAM,IAAIhB,WAAW,GAC3B,MAAM0E,MAAQ,CAAEC,IAAK,WAAc,OAAO,EAAI,GAC9CC,OAAOC,eAAeH,MAAO1E,WAAW8E,WACxCF,OAAOC,eAAe7D,IAAK0D,OAC3B,OAAO1D,IAAI2D,QAAU,EACtB,CAAC,MAAOrC,GACP,OAAO,OAIXsC,OAAOG,eAAed,OAAOa,UAAW,SAAU,CAChDE,WAAY,KACZC,IAAK,WACH,IAAKhB,OAAOiB,SAASC,MAAO,OAAOC,UACnC,OAAOD,KAAKlD,UAIhB2C,OAAOG,eAAed,OAAOa,UAAW,SAAU,CAChDE,WAAY,KACZC,IAAK,WACH,IAAKhB,OAAOiB,SAASC,MAAO,OAAOC,UACnC,OAAOD,KAAKE,cAIhB,SAASC,aAAcjF,QACrB,GAAIA,OAAS+D,aAAc,CACzB,MAAM,IAAImB,WAAW,cAAgBlF,OAAS,kCAGhD,MAAMmF,IAAM,IAAIxF,WAAWK,QAC3BuE,OAAOC,eAAeW,IAAKvB,OAAOa,WAClC,OAAOU,IAaT,SAASvB,OAAQwB,IAAKC,iBAAkBrF,QAEtC,UAAWoF,MAAQ,SAAU,CAC3B,UAAWC,mBAAqB,SAAU,CACxC,MAAM,IAAIC,UACR,sEAGJ,OAAOC,YAAYH,KAErB,OAAOI,KAAKJ,IAAKC,iBAAkBrF,QAGrC4D,OAAO6B,SAAW,KAElB,SAASD,KAAM1C,MAAOuC,iBAAkBrF,QACtC,UAAW8C,QAAU,SAAU,CAC7B,OAAO4C,WAAW5C,MAAOuC,kBAG3B,GAAIM,YAAYC,OAAO9C,OAAQ,CAC7B,OAAO+C,cAAc/C,OAGvB,GAAIA,OAAS,KAAM,CACjB,MAAM,IAAIwC,UACR,8EACA,8CAAiDxC,OAIrD,GAAIgD,WAAWhD,MAAO6C,cACjB7C,OAASgD,WAAWhD,MAAMlB,OAAQ+D,aAAe,CACpD,OAAOI,gBAAgBjD,MAAOuC,iBAAkBrF,QAGlD,UAAWgG,oBAAsB,cAC5BF,WAAWhD,MAAOkD,oBAClBlD,OAASgD,WAAWhD,MAAMlB,OAAQoE,oBAAsB,CAC3D,OAAOD,gBAAgBjD,MAAOuC,iBAAkBrF,QAGlD,UAAW8C,QAAU,SAAU,CAC7B,MAAM,IAAIwC,UACR,yEAIJ,MAAMW,QAAUnD,MAAMmD,SAAWnD,MAAMmD,UACvC,GAAIA,SAAW,MAAQA,UAAYnD,MAAO,CACxC,OAAOc,OAAO4B,KAAKS,QAASZ,iBAAkBrF,QAGhD,MAAMkG,EAAIC,WAAWrD,OACrB,GAAIoD,EAAG,OAAOA,EAEd,UAAWxC,SAAW,aAAeA,OAAO0C,aAAe,aAChDtD,MAAMY,OAAO0C,eAAiB,WAAY,CACnD,OAAOxC,OAAO4B,KAAK1C,MAAMY,OAAO0C,aAAa,UAAWf,iBAAkBrF,QAG5E,MAAM,IAAIsF,UACR,8EACA,8CAAiDxC,OAYrDc,OAAO4B,KAAO,SAAU1C,MAAOuC,iBAAkBrF,QAC/C,OAAOwF,KAAK1C,MAAOuC,iBAAkBrF,SAKvCuE,OAAOC,eAAeZ,OAAOa,UAAW9E,WAAW8E,WACnDF,OAAOC,eAAeZ,OAAQjE,YAE9B,SAAS0G,WAAYC,MACnB,UAAWA,OAAS,SAAU,CAC5B,MAAM,IAAIhB,UAAU,yCACxB,MAAS,GAAIgB,KAAO,EAAG,CACnB,MAAM,IAAIpB,WAAW,cAAgBoB,KAAO,mCAIhD,SAASC,MAAOD,KAAME,KAAMC,UAC1BJ,WAAWC,MACX,GAAIA,MAAQ,EAAG,CACb,OAAOrB,aAAaqB,MAEtB,GAAIE,OAASzB,UAAW,CAItB,cAAc0B,WAAa,SACvBxB,aAAaqB,MAAME,KAAKA,KAAMC,UAC9BxB,aAAaqB,MAAME,KAAKA,MAE9B,OAAOvB,aAAaqB,MAOtB1C,OAAO2C,MAAQ,SAAUD,KAAME,KAAMC,UACnC,OAAOF,MAAMD,KAAME,KAAMC,WAG3B,SAASlB,YAAae,MACpBD,WAAWC,MACX,OAAOrB,aAAaqB,KAAO,EAAI,EAAII,QAAQJ,MAAQ,GAMrD1C,OAAO2B,YAAc,SAAUe,MAC7B,OAAOf,YAAYe,OAKrB1C,OAAO+C,gBAAkB,SAAUL,MACjC,OAAOf,YAAYe,OAGrB,SAASZ,WAAYkB,OAAQH,UAC3B,UAAWA,WAAa,UAAYA,WAAa,GAAI,CACnDA,SAAW,OAGb,IAAK7C,OAAOiD,WAAWJ,UAAW,CAChC,MAAM,IAAInB,UAAU,qBAAuBmB,UAG7C,MAAMzG,OAASX,WAAWuH,OAAQH,UAAY,EAC9C,IAAItB,IAAMF,aAAajF,QAEvB,MAAM8G,OAAS3B,IAAItC,MAAM+D,OAAQH,UAEjC,GAAIK,SAAW9G,OAAQ,CAIrBmF,IAAMA,IAAI4B,MAAM,EAAGD,QAGrB,OAAO3B,IAGT,SAAS6B,cAAeC,OACtB,MAAMjH,OAASiH,MAAMjH,OAAS,EAAI,EAAI0G,QAAQO,MAAMjH,QAAU,EAC9D,MAAMmF,IAAMF,aAAajF,QACzB,IAAK,IAAIF,EAAI,EAAGA,EAAIE,OAAQF,GAAK,EAAG,CAClCqF,IAAIrF,GAAKmH,MAAMnH,GAAK,IAEtB,OAAOqF,IAGT,SAASU,cAAeqB,WACtB,GAAIpB,WAAWoB,UAAWvH,YAAa,CACrC,MAAMwH,KAAO,IAAIxH,WAAWuH,WAC5B,OAAOnB,gBAAgBoB,KAAKvF,OAAQuF,KAAKnC,WAAYmC,KAAK9H,YAE5D,OAAO2H,cAAcE,WAGvB,SAASnB,gBAAiBkB,MAAOjC,WAAYhF,QAC3C,GAAIgF,WAAa,GAAKiC,MAAM5H,WAAa2F,WAAY,CACnD,MAAM,IAAIE,WAAW,wCAGvB,GAAI+B,MAAM5H,WAAa2F,YAAchF,QAAU,GAAI,CACjD,MAAM,IAAIkF,WAAW,wCAGvB,IAAIC,IACJ,GAAIH,aAAeD,WAAa/E,SAAW+E,UAAW,CACpDI,IAAM,IAAIxF,WAAWsH,MACzB,MAAS,GAAIjH,SAAW+E,UAAW,CAC/BI,IAAM,IAAIxF,WAAWsH,MAAOjC,WAChC,KAAS,CACLG,IAAM,IAAIxF,WAAWsH,MAAOjC,WAAYhF,QAI1CuE,OAAOC,eAAeW,IAAKvB,OAAOa,WAElC,OAAOU,IAGT,SAASgB,WAAYiB,KACnB,GAAIxD,OAAOiB,SAASuC,KAAM,CACxB,MAAMrH,IAAM2G,QAAQU,IAAIpH,QAAU,EAClC,MAAMmF,IAAMF,aAAalF,KAEzB,GAAIoF,IAAInF,SAAW,EAAG,CACpB,OAAOmF,IAGTiC,IAAID,KAAKhC,IAAK,EAAG,EAAGpF,KACpB,OAAOoF,IAGT,GAAIiC,IAAIpH,SAAW+E,UAAW,CAC5B,UAAWqC,IAAIpH,SAAW,UAAYqH,YAAYD,IAAIpH,QAAS,CAC7D,OAAOiF,aAAa,GAEtB,OAAO+B,cAAcI,KAGvB,GAAIA,IAAIE,OAAS,UAAY1H,MAAM2H,QAAQH,IAAII,MAAO,CACpD,OAAOR,cAAcI,IAAII,OAI7B,SAASd,QAAS1G,QAGhB,GAAIA,QAAU+D,aAAc,CAC1B,MAAM,IAAImB,WAAW,kDACA,WAAanB,aAAa0D,SAAS,IAAM,UAEhE,OAAOzH,OAAS,EAGlB,SAAS6D,WAAY7D,QACnB,IAAKA,QAAUA,OAAQ,CACrBA,OAAS,EAEX,OAAO4D,OAAO2C,OAAOvG,QAGvB4D,OAAOiB,SAAW,SAASA,SAAUqB,GACnC,OAAOA,GAAK,MAAQA,EAAEwB,YAAc,MAClCxB,IAAMtC,OAAOa,WAGjBb,OAAO+D,QAAU,SAASA,QAASC,EAAG1B,GACpC,GAAIJ,WAAW8B,EAAGjI,YAAaiI,EAAIhE,OAAO4B,KAAKoC,EAAGA,EAAE/F,OAAQ+F,EAAEvI,YAC9D,GAAIyG,WAAWI,EAAGvG,YAAauG,EAAItC,OAAO4B,KAAKU,EAAGA,EAAErE,OAAQqE,EAAE7G,YAC9D,IAAKuE,OAAOiB,SAAS+C,KAAOhE,OAAOiB,SAASqB,GAAI,CAC9C,MAAM,IAAIZ,UACR,yEAIJ,GAAIsC,IAAM1B,EAAG,OAAO,EAEpB,IAAI2B,EAAID,EAAE5H,OACV,IAAI8H,EAAI5B,EAAElG,OAEV,IAAK,IAAIF,EAAI,EAAGC,IAAM4C,KAAKoF,IAAIF,EAAGC,GAAIhI,EAAIC,MAAOD,EAAG,CAClD,GAAI8H,EAAE9H,KAAOoG,EAAEpG,GAAI,CACjB+H,EAAID,EAAE9H,GACNgI,EAAI5B,EAAEpG,GACN,OAIJ,GAAI+H,EAAIC,EAAG,OAAQ,EACnB,GAAIA,EAAID,EAAG,OAAO,EAClB,OAAO,GAGTjE,OAAOiD,WAAa,SAASA,WAAYJ,UACvC,OAAQuB,OAAOvB,UAAUwB,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,KACT,QACE,OAAO,QAIbrE,OAAOsE,OAAS,SAASA,OAAQC,KAAMnI,QACrC,IAAKJ,MAAM2H,QAAQY,MAAO,CACxB,MAAM,IAAI7C,UAAU,+CAGtB,GAAI6C,KAAKnI,SAAW,EAAG,CACrB,OAAO4D,OAAO2C,MAAM,GAGtB,IAAIzG,EACJ,GAAIE,SAAW+E,UAAW,CACxB/E,OAAS,EACT,IAAKF,EAAI,EAAGA,EAAIqI,KAAKnI,SAAUF,EAAG,CAChCE,QAAUmI,KAAKrI,GAAGE,QAItB,MAAM4B,OAASgC,OAAO2B,YAAYvF,QAClC,IAAIoI,IAAM,EACV,IAAKtI,EAAI,EAAGA,EAAIqI,KAAKnI,SAAUF,EAAG,CAChC,IAAIqF,IAAMgD,KAAKrI,GACf,GAAIgG,WAAWX,IAAKxF,YAAa,CAC/B,GAAIyI,IAAMjD,IAAInF,OAAS4B,OAAO5B,OAAQ,CACpC,IAAK4D,OAAOiB,SAASM,KAAMA,IAAMvB,OAAO4B,KAAKL,KAC7CA,IAAIgC,KAAKvF,OAAQwG,IACzB,KAAa,CACLzI,WAAW8E,UAAU4D,IAAIC,KACvB1G,OACAuD,IACAiD,KAGL,MAAM,IAAKxE,OAAOiB,SAASM,KAAM,CAChC,MAAM,IAAIG,UAAU,8CAC1B,KAAW,CACLH,IAAIgC,KAAKvF,OAAQwG,KAEnBA,KAAOjD,IAAInF,OAEb,OAAO4B,QAGT,SAASvC,WAAYuH,OAAQH,UAC3B,GAAI7C,OAAOiB,SAAS+B,QAAS,CAC3B,OAAOA,OAAO5G,OAEhB,GAAI2F,YAAYC,OAAOgB,SAAWd,WAAWc,OAAQjB,aAAc,CACjE,OAAOiB,OAAOvH,WAEhB,UAAWuH,SAAW,SAAU,CAC9B,MAAM,IAAItB,UACR,6EACA,wBAA0BsB,QAI9B,MAAM7G,IAAM6G,OAAO5G,OACnB,MAAMuI,UAAaC,UAAUxI,OAAS,GAAKwI,UAAU,KAAO,KAC5D,IAAKD,WAAaxI,MAAQ,EAAG,OAAO,EAGpC,IAAI0I,YAAc,MAClB,OAAS,CACP,OAAQhC,UACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAO1G,IACT,IAAK,OACL,IAAK,QACH,OAAO2I,YAAY9B,QAAQ5G,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOD,IAAM,EACf,IAAK,MACH,OAAOA,MAAQ,EACjB,IAAK,SACH,OAAO4I,cAAc/B,QAAQ5G,OAC/B,QACE,GAAIyI,YAAa,CACf,OAAOF,WAAa,EAAIG,YAAY9B,QAAQ5G,OAE9CyG,UAAY,GAAKA,UAAUwB,cAC3BQ,YAAc,OAItB7E,OAAOvE,WAAaA,WAEpB,SAASuJ,aAAcnC,SAAUxF,MAAOC,KACtC,IAAIuH,YAAc,MASlB,GAAIxH,QAAU8D,WAAa9D,MAAQ,EAAG,CACpCA,MAAQ,EAIV,GAAIA,MAAQ6D,KAAK9E,OAAQ,CACvB,MAAO,GAGT,GAAIkB,MAAQ6D,WAAa7D,IAAM4D,KAAK9E,OAAQ,CAC1CkB,IAAM4D,KAAK9E,OAGb,GAAIkB,KAAO,EAAG,CACZ,MAAO,GAITA,OAAS,EACTD,SAAW,EAEX,GAAIC,KAAOD,MAAO,CAChB,MAAO,GAGT,IAAKwF,SAAUA,SAAW,OAE1B,MAAO,KAAM,CACX,OAAQA,UACN,IAAK,MACH,OAAOoC,SAAS/D,KAAM7D,MAAOC,KAE/B,IAAK,OACL,IAAK,QACH,OAAO4H,UAAUhE,KAAM7D,MAAOC,KAEhC,IAAK,QACH,OAAO6H,WAAWjE,KAAM7D,MAAOC,KAEjC,IAAK,SACL,IAAK,SACH,OAAO8H,YAAYlE,KAAM7D,MAAOC,KAElC,IAAK,SACH,OAAO+H,YAAYnE,KAAM7D,MAAOC,KAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOgI,aAAapE,KAAM7D,MAAOC,KAEnC,QACE,GAAIuH,YAAa,MAAM,IAAInD,UAAU,qBAAuBmB,UAC5DA,UAAYA,SAAW,IAAIwB,cAC3BQ,YAAc,OAWtB7E,OAAOa,UAAUiD,UAAY,KAE7B,SAASyB,KAAMjD,EAAGkD,EAAGlH,GACnB,MAAMpC,EAAIoG,EAAEkD,GACZlD,EAAEkD,GAAKlD,EAAEhE,GACTgE,EAAEhE,GAAKpC,EAGT8D,OAAOa,UAAU4E,OAAS,SAASA,SACjC,MAAMtJ,IAAM+E,KAAK9E,OACjB,GAAID,IAAM,IAAM,EAAG,CACjB,MAAM,IAAImF,WAAW,6CAEvB,IAAK,IAAIpF,EAAI,EAAGA,EAAIC,IAAKD,GAAK,EAAG,CAC/BqJ,KAAKrE,KAAMhF,EAAGA,EAAI,GAEpB,OAAOgF,MAGTlB,OAAOa,UAAU6E,OAAS,SAASA,SACjC,MAAMvJ,IAAM+E,KAAK9E,OACjB,GAAID,IAAM,IAAM,EAAG,CACjB,MAAM,IAAImF,WAAW,6CAEvB,IAAK,IAAIpF,EAAI,EAAGA,EAAIC,IAAKD,GAAK,EAAG,CAC/BqJ,KAAKrE,KAAMhF,EAAGA,EAAI,GAClBqJ,KAAKrE,KAAMhF,EAAI,EAAGA,EAAI,GAExB,OAAOgF,MAGTlB,OAAOa,UAAU8E,OAAS,SAASA,SACjC,MAAMxJ,IAAM+E,KAAK9E,OACjB,GAAID,IAAM,IAAM,EAAG,CACjB,MAAM,IAAImF,WAAW,6CAEvB,IAAK,IAAIpF,EAAI,EAAGA,EAAIC,IAAKD,GAAK,EAAG,CAC/BqJ,KAAKrE,KAAMhF,EAAGA,EAAI,GAClBqJ,KAAKrE,KAAMhF,EAAI,EAAGA,EAAI,GACtBqJ,KAAKrE,KAAMhF,EAAI,EAAGA,EAAI,GACtBqJ,KAAKrE,KAAMhF,EAAI,EAAGA,EAAI,GAExB,OAAOgF,MAGTlB,OAAOa,UAAUgD,SAAW,SAASA,WACnC,MAAMzH,OAAS8E,KAAK9E,OACpB,GAAIA,SAAW,EAAG,MAAO,GACzB,GAAIwI,UAAUxI,SAAW,EAAG,OAAO8I,UAAUhE,KAAM,EAAG9E,QACtD,OAAO4I,aAAaY,MAAM1E,KAAM0D,YAGlC5E,OAAOa,UAAUgF,eAAiB7F,OAAOa,UAAUgD,SAEnD7D,OAAOa,UAAUiF,OAAS,SAASA,OAAQxD,GACzC,IAAKtC,OAAOiB,SAASqB,GAAI,MAAM,IAAIZ,UAAU,6BAC7C,GAAIR,OAASoB,EAAG,OAAO,KACvB,OAAOtC,OAAO+D,QAAQ7C,KAAMoB,KAAO,GAGrCtC,OAAOa,UAAUkF,QAAU,SAASA,UAClC,IAAIC,IAAM,GACV,MAAMC,IAAMlG,QAAQG,kBACpB8F,IAAM9E,KAAK2C,SAAS,MAAO,EAAGoC,KAAKC,QAAQ,UAAW,OAAOC,OAC7D,GAAIjF,KAAK9E,OAAS6J,IAAKD,KAAO,QAC9B,MAAO,WAAaA,IAAM,KAE5B,GAAInG,oBAAqB,CACvBG,OAAOa,UAAUhB,qBAAuBG,OAAOa,UAAUkF,QAG3D/F,OAAOa,UAAUkD,QAAU,SAASA,QAASqC,OAAQ/I,MAAOC,IAAK+I,UAAWC,SAC1E,GAAIpE,WAAWkE,OAAQrK,YAAa,CAClCqK,OAASpG,OAAO4B,KAAKwE,OAAQA,OAAOnI,OAAQmI,OAAO3K,YAErD,IAAKuE,OAAOiB,SAASmF,QAAS,CAC5B,MAAM,IAAI1E,UACR,mEACA,wBAA2B0E,QAI/B,GAAI/I,QAAU8D,UAAW,CACvB9D,MAAQ,EAEV,GAAIC,MAAQ6D,UAAW,CACrB7D,IAAM8I,OAASA,OAAOhK,OAAS,EAEjC,GAAIiK,YAAclF,UAAW,CAC3BkF,UAAY,EAEd,GAAIC,UAAYnF,UAAW,CACzBmF,QAAUpF,KAAK9E,OAGjB,GAAIiB,MAAQ,GAAKC,IAAM8I,OAAOhK,QAAUiK,UAAY,GAAKC,QAAUpF,KAAK9E,OAAQ,CAC9E,MAAM,IAAIkF,WAAW,sBAGvB,GAAI+E,WAAaC,SAAWjJ,OAASC,IAAK,CACxC,OAAO,EAET,GAAI+I,WAAaC,QAAS,CACxB,OAAQ,EAEV,GAAIjJ,OAASC,IAAK,CAChB,OAAO,EAGTD,SAAW,EACXC,OAAS,EACT+I,aAAe,EACfC,WAAa,EAEb,GAAIpF,OAASkF,OAAQ,OAAO,EAE5B,IAAInC,EAAIqC,QAAUD,UAClB,IAAInC,EAAI5G,IAAMD,MACd,MAAMlB,IAAM4C,KAAKoF,IAAIF,EAAGC,GAExB,MAAMqC,SAAWrF,KAAKiC,MAAMkD,UAAWC,SACvC,MAAME,WAAaJ,OAAOjD,MAAM9F,MAAOC,KAEvC,IAAK,IAAIpB,EAAI,EAAGA,EAAIC,MAAOD,EAAG,CAC5B,GAAIqK,SAASrK,KAAOsK,WAAWtK,GAAI,CACjC+H,EAAIsC,SAASrK,GACbgI,EAAIsC,WAAWtK,GACf,OAIJ,GAAI+H,EAAIC,EAAG,OAAQ,EACnB,GAAIA,EAAID,EAAG,OAAO,EAClB,OAAO,GAYT,SAASwC,qBAAsBzI,OAAQ0I,IAAKtF,WAAYyB,SAAU8D,KAEhE,GAAI3I,OAAO5B,SAAW,EAAG,OAAQ,EAGjC,UAAWgF,aAAe,SAAU,CAClCyB,SAAWzB,WACXA,WAAa,CACjB,MAAS,GAAIA,WAAa,WAAY,CAClCA,WAAa,UACjB,MAAS,GAAIA,YAAc,WAAY,CACnCA,YAAc,WAEhBA,YAAcA,WACd,GAAIqC,YAAYrC,YAAa,CAE3BA,WAAauF,IAAM,EAAK3I,OAAO5B,OAAS,EAI1C,GAAIgF,WAAa,EAAGA,WAAapD,OAAO5B,OAASgF,WACjD,GAAIA,YAAcpD,OAAO5B,OAAQ,CAC/B,GAAIuK,IAAK,OAAQ,OACZvF,WAAapD,OAAO5B,OAAS,CACtC,MAAS,GAAIgF,WAAa,EAAG,CACzB,GAAIuF,IAAKvF,WAAa,OACjB,OAAQ,EAIf,UAAWsF,MAAQ,SAAU,CAC3BA,IAAM1G,OAAO4B,KAAK8E,IAAK7D,UAIzB,GAAI7C,OAAOiB,SAASyF,KAAM,CAExB,GAAIA,IAAItK,SAAW,EAAG,CACpB,OAAQ,EAEV,OAAOwK,aAAa5I,OAAQ0I,IAAKtF,WAAYyB,SAAU8D,IAC3D,MAAS,UAAWD,MAAQ,SAAU,CAClCA,IAAMA,IAAM,IACZ,UAAW3K,WAAW8E,UAAUnE,UAAY,WAAY,CACtD,GAAIiK,IAAK,CACP,OAAO5K,WAAW8E,UAAUnE,QAAQgI,KAAK1G,OAAQ0I,IAAKtF,WAC9D,KAAa,CACL,OAAOrF,WAAW8E,UAAUgG,YAAYnC,KAAK1G,OAAQ0I,IAAKtF,aAG9D,OAAOwF,aAAa5I,OAAQ,CAAC0I,KAAMtF,WAAYyB,SAAU8D,KAG3D,MAAM,IAAIjF,UAAU,wCAGtB,SAASkF,aAAc7J,IAAK2J,IAAKtF,WAAYyB,SAAU8D,KACrD,IAAIG,UAAY,EAChB,IAAIC,UAAYhK,IAAIX,OACpB,IAAI4K,UAAYN,IAAItK,OAEpB,GAAIyG,WAAa1B,UAAW,CAC1B0B,SAAWuB,OAAOvB,UAAUwB,cAC5B,GAAIxB,WAAa,QAAUA,WAAa,SACpCA,WAAa,WAAaA,WAAa,WAAY,CACrD,GAAI9F,IAAIX,OAAS,GAAKsK,IAAItK,OAAS,EAAG,CACpC,OAAQ,EAEV0K,UAAY,EACZC,WAAa,EACbC,WAAa,EACb5F,YAAc,GAIlB,SAASrD,KAAMwD,IAAKrF,GAClB,GAAI4K,YAAc,EAAG,CACnB,OAAOvF,IAAIrF,EACjB,KAAW,CACL,OAAOqF,IAAI0F,aAAa/K,EAAI4K,YAIhC,IAAI5K,EACJ,GAAIyK,IAAK,CACP,IAAIO,YAAc,EAClB,IAAKhL,EAAIkF,WAAYlF,EAAI6K,UAAW7K,IAAK,CACvC,GAAI6B,KAAKhB,IAAKb,KAAO6B,KAAK2I,IAAKQ,cAAgB,EAAI,EAAIhL,EAAIgL,YAAa,CACtE,GAAIA,cAAgB,EAAGA,WAAahL,EACpC,GAAIA,EAAIgL,WAAa,IAAMF,UAAW,OAAOE,WAAaJ,SAClE,KAAa,CACL,GAAII,cAAgB,EAAGhL,GAAKA,EAAIgL,WAChCA,YAAc,GAGtB,KAAS,CACL,GAAI9F,WAAa4F,UAAYD,UAAW3F,WAAa2F,UAAYC,UACjE,IAAK9K,EAAIkF,WAAYlF,GAAK,EAAGA,IAAK,CAChC,IAAIiL,MAAQ,KACZ,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,UAAWI,IAAK,CAClC,GAAIrJ,KAAKhB,IAAKb,EAAIkL,KAAOrJ,KAAK2I,IAAKU,GAAI,CACrCD,MAAQ,MACR,OAGJ,GAAIA,MAAO,OAAOjL,GAItB,OAAQ,EAGV8D,OAAOa,UAAUwG,SAAW,SAASA,SAAUX,IAAKtF,WAAYyB,UAC9D,OAAO3B,KAAKxE,QAAQgK,IAAKtF,WAAYyB,aAAe,GAGtD7C,OAAOa,UAAUnE,QAAU,SAASA,QAASgK,IAAKtF,WAAYyB,UAC5D,OAAO4D,qBAAqBvF,KAAMwF,IAAKtF,WAAYyB,SAAU,OAG/D7C,OAAOa,UAAUgG,YAAc,SAASA,YAAaH,IAAKtF,WAAYyB,UACpE,OAAO4D,qBAAqBvF,KAAMwF,IAAKtF,WAAYyB,SAAU,QAG/D,SAASyE,SAAU/F,IAAKyB,OAAQ/E,OAAQ7B,QACtC6B,OAASsJ,OAAOtJ,SAAW,EAC3B,MAAMuJ,UAAYjG,IAAInF,OAAS6B,OAC/B,IAAK7B,OAAQ,CACXA,OAASoL,SACb,KAAS,CACLpL,OAASmL,OAAOnL,QAChB,GAAIA,OAASoL,UAAW,CACtBpL,OAASoL,WAIb,MAAMC,OAASzE,OAAO5G,OAEtB,GAAIA,OAASqL,OAAS,EAAG,CACvBrL,OAASqL,OAAS,EAEpB,IAAIvL,EACJ,IAAKA,EAAI,EAAGA,EAAIE,SAAUF,EAAG,CAC3B,MAAMwL,OAASC,SAAS3E,OAAO4E,OAAO1L,EAAI,EAAG,GAAI,IACjD,GAAIuH,YAAYiE,QAAS,OAAOxL,EAChCqF,IAAItD,OAAS/B,GAAKwL,OAEpB,OAAOxL,EAGT,SAAS2L,UAAWtG,IAAKyB,OAAQ/E,OAAQ7B,QACvC,OAAO0L,WAAWhD,YAAY9B,OAAQzB,IAAInF,OAAS6B,QAASsD,IAAKtD,OAAQ7B,QAG3E,SAAS2L,WAAYxG,IAAKyB,OAAQ/E,OAAQ7B,QACxC,OAAO0L,WAAWE,aAAahF,QAASzB,IAAKtD,OAAQ7B,QAGvD,SAAS6L,YAAa1G,IAAKyB,OAAQ/E,OAAQ7B,QACzC,OAAO0L,WAAW/C,cAAc/B,QAASzB,IAAKtD,OAAQ7B,QAGxD,SAAS8L,UAAW3G,IAAKyB,OAAQ/E,OAAQ7B,QACvC,OAAO0L,WAAWK,eAAenF,OAAQzB,IAAInF,OAAS6B,QAASsD,IAAKtD,OAAQ7B,QAG9E4D,OAAOa,UAAU5B,MAAQ,SAASA,MAAO+D,OAAQ/E,OAAQ7B,OAAQyG,UAE/D,GAAI5E,SAAWkD,UAAW,CACxB0B,SAAW,OACXzG,OAAS8E,KAAK9E,OACd6B,OAAS,CAEV,MAAM,GAAI7B,SAAW+E,kBAAoBlD,SAAW,SAAU,CAC7D4E,SAAW5E,OACX7B,OAAS8E,KAAK9E,OACd6B,OAAS,CAEb,MAAS,GAAImK,SAASnK,QAAS,CAC3BA,OAASA,SAAW,EACpB,GAAImK,SAAShM,QAAS,CACpBA,OAASA,SAAW,EACpB,GAAIyG,WAAa1B,UAAW0B,SAAW,MAC7C,KAAW,CACLA,SAAWzG,OACXA,OAAS+E,UAEf,KAAS,CACL,MAAM,IAAI3E,MACR,2EAIJ,MAAMgL,UAAYtG,KAAK9E,OAAS6B,OAChC,GAAI7B,SAAW+E,WAAa/E,OAASoL,UAAWpL,OAASoL,UAEzD,GAAKxE,OAAO5G,OAAS,IAAMA,OAAS,GAAK6B,OAAS,IAAOA,OAASiD,KAAK9E,OAAQ,CAC7E,MAAM,IAAIkF,WAAW,0CAGvB,IAAKuB,SAAUA,SAAW,OAE1B,IAAIgC,YAAc,MAClB,OAAS,CACP,OAAQhC,UACN,IAAK,MACH,OAAOyE,SAASpG,KAAM8B,OAAQ/E,OAAQ7B,QAExC,IAAK,OACL,IAAK,QACH,OAAOyL,UAAU3G,KAAM8B,OAAQ/E,OAAQ7B,QAEzC,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAO2L,WAAW7G,KAAM8B,OAAQ/E,OAAQ7B,QAE1C,IAAK,SAEH,OAAO6L,YAAY/G,KAAM8B,OAAQ/E,OAAQ7B,QAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO8L,UAAUhH,KAAM8B,OAAQ/E,OAAQ7B,QAEzC,QACE,GAAIyI,YAAa,MAAM,IAAInD,UAAU,qBAAuBmB,UAC5DA,UAAY,GAAKA,UAAUwB,cAC3BQ,YAAc,QAKtB7E,OAAOa,UAAUwH,OAAS,SAASA,SACjC,MAAO,CACL3E,KAAM,SACNE,KAAM5H,MAAM6E,UAAUsC,MAAMuB,KAAKxD,KAAKoH,MAAQpH,KAAM,KAIxD,SAASmE,YAAa9D,IAAKlE,MAAOC,KAChC,GAAID,QAAU,GAAKC,MAAQiE,IAAInF,OAAQ,CACrC,OAAOsD,OAAO/D,cAAc4F,IAChC,KAAS,CACL,OAAO7B,OAAO/D,cAAc4F,IAAI4B,MAAM9F,MAAOC,OAIjD,SAAS4H,UAAW3D,IAAKlE,MAAOC,KAC9BA,IAAMyB,KAAKoF,IAAI5C,IAAInF,OAAQkB,KAC3B,MAAMiL,IAAM,GAEZ,IAAIrM,EAAImB,MACR,MAAOnB,EAAIoB,IAAK,CACd,MAAMkL,UAAYjH,IAAIrF,GACtB,IAAIuM,UAAY,KAChB,IAAIC,iBAAoBF,UAAY,IAChC,EACCA,UAAY,IACT,EACCA,UAAY,IACT,EACA,EAEZ,GAAItM,EAAIwM,kBAAoBpL,IAAK,CAC/B,IAAIqL,WAAYC,UAAWC,WAAYC,cAEvC,OAAQJ,kBACN,KAAK,EACH,GAAIF,UAAY,IAAM,CACpBC,UAAYD,UAEd,MACF,KAAK,EACHG,WAAapH,IAAIrF,EAAI,GACrB,IAAKyM,WAAa,OAAU,IAAM,CAChCG,eAAiBN,UAAY,KAAS,EAAOG,WAAa,GAC1D,GAAIG,cAAgB,IAAM,CACxBL,UAAYK,eAGhB,MACF,KAAK,EACHH,WAAapH,IAAIrF,EAAI,GACrB0M,UAAYrH,IAAIrF,EAAI,GACpB,IAAKyM,WAAa,OAAU,MAASC,UAAY,OAAU,IAAM,CAC/DE,eAAiBN,UAAY,KAAQ,IAAOG,WAAa,KAAS,EAAOC,UAAY,GACrF,GAAIE,cAAgB,OAAUA,cAAgB,OAAUA,cAAgB,OAAS,CAC/EL,UAAYK,eAGhB,MACF,KAAK,EACHH,WAAapH,IAAIrF,EAAI,GACrB0M,UAAYrH,IAAIrF,EAAI,GACpB2M,WAAatH,IAAIrF,EAAI,GACrB,IAAKyM,WAAa,OAAU,MAASC,UAAY,OAAU,MAASC,WAAa,OAAU,IAAM,CAC/FC,eAAiBN,UAAY,KAAQ,IAAQG,WAAa,KAAS,IAAOC,UAAY,KAAS,EAAOC,WAAa,GACnH,GAAIC,cAAgB,OAAUA,cAAgB,QAAU,CACtDL,UAAYK,iBAMtB,GAAIL,YAAc,KAAM,CAGtBA,UAAY,MACZC,iBAAmB,CACzB,MAAW,GAAID,UAAY,MAAQ,CAE7BA,WAAa,MACbF,IAAI/K,KAAKiL,YAAc,GAAK,KAAQ,OACpCA,UAAY,MAASA,UAAY,KAGnCF,IAAI/K,KAAKiL,WACTvM,GAAKwM,iBAGP,OAAOK,sBAAsBR,KAM/B,MAAMS,qBAAuB,KAE7B,SAASD,sBAAuBE,YAC9B,MAAM9M,IAAM8M,WAAW7M,OACvB,GAAID,KAAO6M,qBAAsB,CAC/B,OAAO5E,OAAO8E,aAAatD,MAAMxB,OAAQ6E,YAI3C,IAAIV,IAAM,GACV,IAAIrM,EAAI,EACR,MAAOA,EAAIC,IAAK,CACdoM,KAAOnE,OAAO8E,aAAatD,MACzBxB,OACA6E,WAAW9F,MAAMjH,EAAGA,GAAK8M,uBAG7B,OAAOT,IAGT,SAASpD,WAAY5D,IAAKlE,MAAOC,KAC/B,IAAI6L,IAAM,GACV7L,IAAMyB,KAAKoF,IAAI5C,IAAInF,OAAQkB,KAE3B,IAAK,IAAIpB,EAAImB,MAAOnB,EAAIoB,MAAOpB,EAAG,CAChCiN,KAAO/E,OAAO8E,aAAa3H,IAAIrF,GAAK,KAEtC,OAAOiN,IAGT,SAAS/D,YAAa7D,IAAKlE,MAAOC,KAChC,IAAI6L,IAAM,GACV7L,IAAMyB,KAAKoF,IAAI5C,IAAInF,OAAQkB,KAE3B,IAAK,IAAIpB,EAAImB,MAAOnB,EAAIoB,MAAOpB,EAAG,CAChCiN,KAAO/E,OAAO8E,aAAa3H,IAAIrF,IAEjC,OAAOiN,IAGT,SAASlE,SAAU1D,IAAKlE,MAAOC,KAC7B,MAAMnB,IAAMoF,IAAInF,OAEhB,IAAKiB,OAASA,MAAQ,EAAGA,MAAQ,EACjC,IAAKC,KAAOA,IAAM,GAAKA,IAAMnB,IAAKmB,IAAMnB,IAExC,IAAIiN,IAAM,GACV,IAAK,IAAIlN,EAAImB,MAAOnB,EAAIoB,MAAOpB,EAAG,CAChCkN,KAAOC,oBAAoB9H,IAAIrF,IAEjC,OAAOkN,IAGT,SAAS9D,aAAc/D,IAAKlE,MAAOC,KACjC,MAAMgM,MAAQ/H,IAAI4B,MAAM9F,MAAOC,KAC/B,IAAIiL,IAAM,GAEV,IAAK,IAAIrM,EAAI,EAAGA,EAAIoN,MAAMlN,OAAS,EAAGF,GAAK,EAAG,CAC5CqM,KAAOnE,OAAO8E,aAAaI,MAAMpN,GAAMoN,MAAMpN,EAAI,GAAK,KAExD,OAAOqM,IAGTvI,OAAOa,UAAUsC,MAAQ,SAASA,MAAO9F,MAAOC,KAC9C,MAAMnB,IAAM+E,KAAK9E,OACjBiB,QAAUA,MACVC,IAAMA,MAAQ6D,UAAYhF,MAAQmB,IAElC,GAAID,MAAQ,EAAG,CACbA,OAASlB,IACT,GAAIkB,MAAQ,EAAGA,MAAQ,CAC3B,MAAS,GAAIA,MAAQlB,IAAK,CACtBkB,MAAQlB,IAGV,GAAImB,IAAM,EAAG,CACXA,KAAOnB,IACP,GAAImB,IAAM,EAAGA,IAAM,CACvB,MAAS,GAAIA,IAAMnB,IAAK,CACpBmB,IAAMnB,IAGR,GAAImB,IAAMD,MAAOC,IAAMD,MAEvB,MAAMkM,OAASrI,KAAKsI,SAASnM,MAAOC,KAEpCqD,OAAOC,eAAe2I,OAAQvJ,OAAOa,WAErC,OAAO0I,QAMT,SAASE,YAAaxL,OAAQyL,IAAKtN,QACjC,GAAK6B,OAAS,IAAO,GAAKA,OAAS,EAAG,MAAM,IAAIqD,WAAW,sBAC3D,GAAIrD,OAASyL,IAAMtN,OAAQ,MAAM,IAAIkF,WAAW,yCAGlDtB,OAAOa,UAAU8I,WACjB3J,OAAOa,UAAU+I,WAAa,SAASA,WAAY3L,OAAQxC,WAAYoO,UACrE5L,OAASA,SAAW,EACpBxC,WAAaA,aAAe,EAC5B,IAAKoO,SAAUJ,YAAYxL,OAAQxC,WAAYyF,KAAK9E,QAEpD,IAAIsK,IAAMxF,KAAKjD,QACf,IAAI6L,IAAM,EACV,IAAI5N,EAAI,EACR,QAASA,EAAIT,aAAeqO,KAAO,KAAQ,CACzCpD,KAAOxF,KAAKjD,OAAS/B,GAAK4N,IAG5B,OAAOpD,KAGT1G,OAAOa,UAAUkJ,WACjB/J,OAAOa,UAAUmJ,WAAa,SAASA,WAAY/L,OAAQxC,WAAYoO,UACrE5L,OAASA,SAAW,EACpBxC,WAAaA,aAAe,EAC5B,IAAKoO,SAAU,CACbJ,YAAYxL,OAAQxC,WAAYyF,KAAK9E,QAGvC,IAAIsK,IAAMxF,KAAKjD,SAAWxC,YAC1B,IAAIqO,IAAM,EACV,MAAOrO,WAAa,IAAMqO,KAAO,KAAQ,CACvCpD,KAAOxF,KAAKjD,SAAWxC,YAAcqO,IAGvC,OAAOpD,KAGT1G,OAAOa,UAAUoJ,UACjBjK,OAAOa,UAAUqJ,UAAY,SAASA,UAAWjM,OAAQ4L,UACvD5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,OAAO8E,KAAKjD,SAGd+B,OAAOa,UAAUsJ,aACjBnK,OAAOa,UAAUuJ,aAAe,SAASA,aAAcnM,OAAQ4L,UAC7D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,OAAO8E,KAAKjD,QAAWiD,KAAKjD,OAAS,IAAM,GAG7C+B,OAAOa,UAAUwJ,aACjBrK,OAAOa,UAAUoG,aAAe,SAASA,aAAchJ,OAAQ4L,UAC7D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,OAAQ8E,KAAKjD,SAAW,EAAKiD,KAAKjD,OAAS,IAG7C+B,OAAOa,UAAUyJ,aACjBtK,OAAOa,UAAU0J,aAAe,SAASA,aAActM,OAAQ4L,UAC7D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAE3C,OAAS8E,KAAKjD,QACTiD,KAAKjD,OAAS,IAAM,EACpBiD,KAAKjD,OAAS,IAAM,IACpBiD,KAAKjD,OAAS,GAAK,UAG1B+B,OAAOa,UAAU2J,aACjBxK,OAAOa,UAAU4J,aAAe,SAASA,aAAcxM,OAAQ4L,UAC7D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAE3C,OAAQ8E,KAAKjD,QAAU,UACnBiD,KAAKjD,OAAS,IAAM,GACrBiD,KAAKjD,OAAS,IAAM,EACrBiD,KAAKjD,OAAS,KAGlB+B,OAAOa,UAAU6J,gBAAkBC,oBAAmB,SAASD,gBAAiBzM,QAC9EA,OAASA,SAAW,EACpB2M,eAAe3M,OAAQ,UACvB,MAAM4M,MAAQ3J,KAAKjD,QACnB,MAAM6M,KAAO5J,KAAKjD,OAAS,GAC3B,GAAI4M,QAAU1J,WAAa2J,OAAS3J,UAAW,CAC7C4J,YAAY9M,OAAQiD,KAAK9E,OAAS,GAGpC,MAAM4O,GAAKH,MACT3J,OAAOjD,QAAU,GAAK,EACtBiD,OAAOjD,QAAU,GAAK,GACtBiD,OAAOjD,QAAU,GAAK,GAExB,MAAMgN,GAAK/J,OAAOjD,QAChBiD,OAAOjD,QAAU,GAAK,EACtBiD,OAAOjD,QAAU,GAAK,GACtB6M,KAAO,GAAK,GAEd,OAAOI,OAAOF,KAAOE,OAAOD,KAAOC,OAAO,IAC3C,IAEDlL,OAAOa,UAAUsK,gBAAkBR,oBAAmB,SAASQ,gBAAiBlN,QAC9EA,OAASA,SAAW,EACpB2M,eAAe3M,OAAQ,UACvB,MAAM4M,MAAQ3J,KAAKjD,QACnB,MAAM6M,KAAO5J,KAAKjD,OAAS,GAC3B,GAAI4M,QAAU1J,WAAa2J,OAAS3J,UAAW,CAC7C4J,YAAY9M,OAAQiD,KAAK9E,OAAS,GAGpC,MAAM6O,GAAKJ,MAAQ,GAAK,GACtB3J,OAAOjD,QAAU,GAAK,GACtBiD,OAAOjD,QAAU,GAAK,EACtBiD,OAAOjD,QAET,MAAM+M,GAAK9J,OAAOjD,QAAU,GAAK,GAC/BiD,OAAOjD,QAAU,GAAK,GACtBiD,OAAOjD,QAAU,GAAK,EACtB6M,KAEF,OAAQI,OAAOD,KAAOC,OAAO,KAAOA,OAAOF,GAC5C,IAEDhL,OAAOa,UAAUuK,UAAY,SAASA,UAAWnN,OAAQxC,WAAYoO,UACnE5L,OAASA,SAAW,EACpBxC,WAAaA,aAAe,EAC5B,IAAKoO,SAAUJ,YAAYxL,OAAQxC,WAAYyF,KAAK9E,QAEpD,IAAIsK,IAAMxF,KAAKjD,QACf,IAAI6L,IAAM,EACV,IAAI5N,EAAI,EACR,QAASA,EAAIT,aAAeqO,KAAO,KAAQ,CACzCpD,KAAOxF,KAAKjD,OAAS/B,GAAK4N,IAE5BA,KAAO,IAEP,GAAIpD,KAAOoD,IAAKpD,KAAO3H,KAAKC,IAAI,EAAG,EAAIvD,YAEvC,OAAOiL,KAGT1G,OAAOa,UAAUwK,UAAY,SAASA,UAAWpN,OAAQxC,WAAYoO,UACnE5L,OAASA,SAAW,EACpBxC,WAAaA,aAAe,EAC5B,IAAKoO,SAAUJ,YAAYxL,OAAQxC,WAAYyF,KAAK9E,QAEpD,IAAIF,EAAIT,WACR,IAAIqO,IAAM,EACV,IAAIpD,IAAMxF,KAAKjD,SAAW/B,GAC1B,MAAOA,EAAI,IAAM4N,KAAO,KAAQ,CAC9BpD,KAAOxF,KAAKjD,SAAW/B,GAAK4N,IAE9BA,KAAO,IAEP,GAAIpD,KAAOoD,IAAKpD,KAAO3H,KAAKC,IAAI,EAAG,EAAIvD,YAEvC,OAAOiL,KAGT1G,OAAOa,UAAUyK,SAAW,SAASA,SAAUrN,OAAQ4L,UACrD5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,KAAM8E,KAAKjD,QAAU,KAAO,OAAQiD,KAAKjD,QACzC,OAAS,IAAOiD,KAAKjD,QAAU,IAAM,GAGvC+B,OAAOa,UAAU0K,YAAc,SAASA,YAAatN,OAAQ4L,UAC3D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,MAAMsK,IAAMxF,KAAKjD,QAAWiD,KAAKjD,OAAS,IAAM,EAChD,OAAQyI,IAAM,MAAUA,IAAM,WAAaA,KAG7C1G,OAAOa,UAAU2K,YAAc,SAASA,YAAavN,OAAQ4L,UAC3D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,MAAMsK,IAAMxF,KAAKjD,OAAS,GAAMiD,KAAKjD,SAAW,EAChD,OAAQyI,IAAM,MAAUA,IAAM,WAAaA,KAG7C1G,OAAOa,UAAU4K,YAAc,SAASA,YAAaxN,OAAQ4L,UAC3D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAE3C,OAAQ8E,KAAKjD,QACViD,KAAKjD,OAAS,IAAM,EACpBiD,KAAKjD,OAAS,IAAM,GACpBiD,KAAKjD,OAAS,IAAM,IAGzB+B,OAAOa,UAAU6K,YAAc,SAASA,YAAazN,OAAQ4L,UAC3D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAE3C,OAAQ8E,KAAKjD,SAAW,GACrBiD,KAAKjD,OAAS,IAAM,GACpBiD,KAAKjD,OAAS,IAAM,EACpBiD,KAAKjD,OAAS,IAGnB+B,OAAOa,UAAU8K,eAAiBhB,oBAAmB,SAASgB,eAAgB1N,QAC5EA,OAASA,SAAW,EACpB2M,eAAe3M,OAAQ,UACvB,MAAM4M,MAAQ3J,KAAKjD,QACnB,MAAM6M,KAAO5J,KAAKjD,OAAS,GAC3B,GAAI4M,QAAU1J,WAAa2J,OAAS3J,UAAW,CAC7C4J,YAAY9M,OAAQiD,KAAK9E,OAAS,GAGpC,MAAMsK,IAAMxF,KAAKjD,OAAS,GACxBiD,KAAKjD,OAAS,GAAK,GAAK,EACxBiD,KAAKjD,OAAS,GAAK,GAAK,IACvB6M,MAAQ,IAEX,OAAQI,OAAOxE,MAAQwE,OAAO,KAC5BA,OAAOL,MACP3J,OAAOjD,QAAU,GAAK,EACtBiD,OAAOjD,QAAU,GAAK,GACtBiD,OAAOjD,QAAU,GAAK,GACzB,IAED+B,OAAOa,UAAU+K,eAAiBjB,oBAAmB,SAASiB,eAAgB3N,QAC5EA,OAASA,SAAW,EACpB2M,eAAe3M,OAAQ,UACvB,MAAM4M,MAAQ3J,KAAKjD,QACnB,MAAM6M,KAAO5J,KAAKjD,OAAS,GAC3B,GAAI4M,QAAU1J,WAAa2J,OAAS3J,UAAW,CAC7C4J,YAAY9M,OAAQiD,KAAK9E,OAAS,GAGpC,MAAMsK,KAAOmE,OAAS,IACpB3J,OAAOjD,QAAU,GAAK,GACtBiD,OAAOjD,QAAU,GAAK,EACtBiD,OAAOjD,QAET,OAAQiN,OAAOxE,MAAQwE,OAAO,KAC5BA,OAAOhK,OAAOjD,QAAU,GAAK,GAC7BiD,OAAOjD,QAAU,GAAK,GACtBiD,OAAOjD,QAAU,GAAK,EACtB6M,KACH,IAED9K,OAAOa,UAAUgL,YAAc,SAASA,YAAa5N,OAAQ4L,UAC3D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,OAAO0B,QAAQC,KAAKmD,KAAMjD,OAAQ,KAAM,GAAI,IAG9C+B,OAAOa,UAAUiL,YAAc,SAASA,YAAa7N,OAAQ4L,UAC3D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,OAAO0B,QAAQC,KAAKmD,KAAMjD,OAAQ,MAAO,GAAI,IAG/C+B,OAAOa,UAAUkL,aAAe,SAASA,aAAc9N,OAAQ4L,UAC7D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,OAAO0B,QAAQC,KAAKmD,KAAMjD,OAAQ,KAAM,GAAI,IAG9C+B,OAAOa,UAAUmL,aAAe,SAASA,aAAc/N,OAAQ4L,UAC7D5L,OAASA,SAAW,EACpB,IAAK4L,SAAUJ,YAAYxL,OAAQ,EAAGiD,KAAK9E,QAC3C,OAAO0B,QAAQC,KAAKmD,KAAMjD,OAAQ,MAAO,GAAI,IAG/C,SAASgO,SAAU1K,IAAKrC,MAAOjB,OAAQyL,IAAKzD,IAAK9B,KAC/C,IAAKnE,OAAOiB,SAASM,KAAM,MAAM,IAAIG,UAAU,+CAC/C,GAAIxC,MAAQ+G,KAAO/G,MAAQiF,IAAK,MAAM,IAAI7C,WAAW,qCACrD,GAAIrD,OAASyL,IAAMnI,IAAInF,OAAQ,MAAM,IAAIkF,WAAW,sBAGtDtB,OAAOa,UAAUqL,YACjBlM,OAAOa,UAAUsL,YAAc,SAASA,YAAajN,MAAOjB,OAAQxC,WAAYoO,UAC9E3K,OAASA,MACTjB,OAASA,SAAW,EACpBxC,WAAaA,aAAe,EAC5B,IAAKoO,SAAU,CACb,MAAMuC,SAAWrN,KAAKC,IAAI,EAAG,EAAIvD,YAAc,EAC/CwQ,SAAS/K,KAAMhC,MAAOjB,OAAQxC,WAAY2Q,SAAU,GAGtD,IAAItC,IAAM,EACV,IAAI5N,EAAI,EACRgF,KAAKjD,QAAUiB,MAAQ,IACvB,QAAShD,EAAIT,aAAeqO,KAAO,KAAQ,CACzC5I,KAAKjD,OAAS/B,GAAMgD,MAAQ4K,IAAO,IAGrC,OAAO7L,OAASxC,YAGlBuE,OAAOa,UAAUwL,YACjBrM,OAAOa,UAAUyL,YAAc,SAASA,YAAapN,MAAOjB,OAAQxC,WAAYoO,UAC9E3K,OAASA,MACTjB,OAASA,SAAW,EACpBxC,WAAaA,aAAe,EAC5B,IAAKoO,SAAU,CACb,MAAMuC,SAAWrN,KAAKC,IAAI,EAAG,EAAIvD,YAAc,EAC/CwQ,SAAS/K,KAAMhC,MAAOjB,OAAQxC,WAAY2Q,SAAU,GAGtD,IAAIlQ,EAAIT,WAAa,EACrB,IAAIqO,IAAM,EACV5I,KAAKjD,OAAS/B,GAAKgD,MAAQ,IAC3B,QAAShD,GAAK,IAAM4N,KAAO,KAAQ,CACjC5I,KAAKjD,OAAS/B,GAAMgD,MAAQ4K,IAAO,IAGrC,OAAO7L,OAASxC,YAGlBuE,OAAOa,UAAU0L,WACjBvM,OAAOa,UAAU2L,WAAa,SAASA,WAAYtN,MAAOjB,OAAQ4L,UAChE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,IAAM,GACtDiD,KAAKjD,QAAWiB,MAAQ,IACxB,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAU4L,cACjBzM,OAAOa,UAAU6L,cAAgB,SAASA,cAAexN,MAAOjB,OAAQ4L,UACtE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,MAAQ,GACxDiD,KAAKjD,QAAWiB,MAAQ,IACxBgC,KAAKjD,OAAS,GAAMiB,QAAU,EAC9B,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAU8L,cACjB3M,OAAOa,UAAU+L,cAAgB,SAASA,cAAe1N,MAAOjB,OAAQ4L,UACtE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,MAAQ,GACxDiD,KAAKjD,QAAWiB,QAAU,EAC1BgC,KAAKjD,OAAS,GAAMiB,MAAQ,IAC5B,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAUgM,cACjB7M,OAAOa,UAAUiM,cAAgB,SAASA,cAAe5N,MAAOjB,OAAQ4L,UACtE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,WAAY,GAC5DiD,KAAKjD,OAAS,GAAMiB,QAAU,GAC9BgC,KAAKjD,OAAS,GAAMiB,QAAU,GAC9BgC,KAAKjD,OAAS,GAAMiB,QAAU,EAC9BgC,KAAKjD,QAAWiB,MAAQ,IACxB,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAUkM,cACjB/M,OAAOa,UAAUmM,cAAgB,SAASA,cAAe9N,MAAOjB,OAAQ4L,UACtE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,WAAY,GAC5DiD,KAAKjD,QAAWiB,QAAU,GAC1BgC,KAAKjD,OAAS,GAAMiB,QAAU,GAC9BgC,KAAKjD,OAAS,GAAMiB,QAAU,EAC9BgC,KAAKjD,OAAS,GAAMiB,MAAQ,IAC5B,OAAOjB,OAAS,GAGlB,SAASgP,eAAgB1L,IAAKrC,MAAOjB,OAAQkG,IAAK8B,KAChDiH,WAAWhO,MAAOiF,IAAK8B,IAAK1E,IAAKtD,OAAQ,GAEzC,IAAI+M,GAAKzD,OAAOrI,MAAQgM,OAAO,aAC/B3J,IAAItD,UAAY+M,GAChBA,GAAKA,IAAM,EACXzJ,IAAItD,UAAY+M,GAChBA,GAAKA,IAAM,EACXzJ,IAAItD,UAAY+M,GAChBA,GAAKA,IAAM,EACXzJ,IAAItD,UAAY+M,GAChB,IAAIC,GAAK1D,OAAOrI,OAASgM,OAAO,IAAMA,OAAO,aAC7C3J,IAAItD,UAAYgN,GAChBA,GAAKA,IAAM,EACX1J,IAAItD,UAAYgN,GAChBA,GAAKA,IAAM,EACX1J,IAAItD,UAAYgN,GAChBA,GAAKA,IAAM,EACX1J,IAAItD,UAAYgN,GAChB,OAAOhN,OAGT,SAASkP,eAAgB5L,IAAKrC,MAAOjB,OAAQkG,IAAK8B,KAChDiH,WAAWhO,MAAOiF,IAAK8B,IAAK1E,IAAKtD,OAAQ,GAEzC,IAAI+M,GAAKzD,OAAOrI,MAAQgM,OAAO,aAC/B3J,IAAItD,OAAS,GAAK+M,GAClBA,GAAKA,IAAM,EACXzJ,IAAItD,OAAS,GAAK+M,GAClBA,GAAKA,IAAM,EACXzJ,IAAItD,OAAS,GAAK+M,GAClBA,GAAKA,IAAM,EACXzJ,IAAItD,OAAS,GAAK+M,GAClB,IAAIC,GAAK1D,OAAOrI,OAASgM,OAAO,IAAMA,OAAO,aAC7C3J,IAAItD,OAAS,GAAKgN,GAClBA,GAAKA,IAAM,EACX1J,IAAItD,OAAS,GAAKgN,GAClBA,GAAKA,IAAM,EACX1J,IAAItD,OAAS,GAAKgN,GAClBA,GAAKA,IAAM,EACX1J,IAAItD,QAAUgN,GACd,OAAOhN,OAAS,EAGlB+B,OAAOa,UAAUuM,iBAAmBzC,oBAAmB,SAASyC,iBAAkBlO,MAAOjB,OAAS,GAChG,OAAOgP,eAAe/L,KAAMhC,MAAOjB,OAAQiN,OAAO,GAAIA,OAAO,sBAC9D,IAEDlL,OAAOa,UAAUwM,iBAAmB1C,oBAAmB,SAAS0C,iBAAkBnO,MAAOjB,OAAS,GAChG,OAAOkP,eAAejM,KAAMhC,MAAOjB,OAAQiN,OAAO,GAAIA,OAAO,sBAC9D,IAEDlL,OAAOa,UAAUyM,WAAa,SAASA,WAAYpO,MAAOjB,OAAQxC,WAAYoO,UAC5E3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAU,CACb,MAAM0D,MAAQxO,KAAKC,IAAI,EAAI,EAAIvD,WAAc,GAE7CwQ,SAAS/K,KAAMhC,MAAOjB,OAAQxC,WAAY8R,MAAQ,GAAIA,OAGxD,IAAIrR,EAAI,EACR,IAAI4N,IAAM,EACV,IAAI0D,IAAM,EACVtM,KAAKjD,QAAUiB,MAAQ,IACvB,QAAShD,EAAIT,aAAeqO,KAAO,KAAQ,CACzC,GAAI5K,MAAQ,GAAKsO,MAAQ,GAAKtM,KAAKjD,OAAS/B,EAAI,KAAO,EAAG,CACxDsR,IAAM,EAERtM,KAAKjD,OAAS/B,IAAOgD,MAAQ4K,KAAQ,GAAK0D,IAAM,IAGlD,OAAOvP,OAASxC,YAGlBuE,OAAOa,UAAU4M,WAAa,SAASA,WAAYvO,MAAOjB,OAAQxC,WAAYoO,UAC5E3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAU,CACb,MAAM0D,MAAQxO,KAAKC,IAAI,EAAI,EAAIvD,WAAc,GAE7CwQ,SAAS/K,KAAMhC,MAAOjB,OAAQxC,WAAY8R,MAAQ,GAAIA,OAGxD,IAAIrR,EAAIT,WAAa,EACrB,IAAIqO,IAAM,EACV,IAAI0D,IAAM,EACVtM,KAAKjD,OAAS/B,GAAKgD,MAAQ,IAC3B,QAAShD,GAAK,IAAM4N,KAAO,KAAQ,CACjC,GAAI5K,MAAQ,GAAKsO,MAAQ,GAAKtM,KAAKjD,OAAS/B,EAAI,KAAO,EAAG,CACxDsR,IAAM,EAERtM,KAAKjD,OAAS/B,IAAOgD,MAAQ4K,KAAQ,GAAK0D,IAAM,IAGlD,OAAOvP,OAASxC,YAGlBuE,OAAOa,UAAU6M,UAAY,SAASA,UAAWxO,MAAOjB,OAAQ4L,UAC9D3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,KAAO,KACvD,GAAIiB,MAAQ,EAAGA,MAAQ,IAAOA,MAAQ,EACtCgC,KAAKjD,QAAWiB,MAAQ,IACxB,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAU8M,aAAe,SAASA,aAAczO,MAAOjB,OAAQ4L,UACpE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,OAAS,OACzDiD,KAAKjD,QAAWiB,MAAQ,IACxBgC,KAAKjD,OAAS,GAAMiB,QAAU,EAC9B,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAU+M,aAAe,SAASA,aAAc1O,MAAOjB,OAAQ4L,UACpE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,OAAS,OACzDiD,KAAKjD,QAAWiB,QAAU,EAC1BgC,KAAKjD,OAAS,GAAMiB,MAAQ,IAC5B,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAUgN,aAAe,SAASA,aAAc3O,MAAOjB,OAAQ4L,UACpE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,YAAa,YAC7DiD,KAAKjD,QAAWiB,MAAQ,IACxBgC,KAAKjD,OAAS,GAAMiB,QAAU,EAC9BgC,KAAKjD,OAAS,GAAMiB,QAAU,GAC9BgC,KAAKjD,OAAS,GAAMiB,QAAU,GAC9B,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAUiN,aAAe,SAASA,aAAc5O,MAAOjB,OAAQ4L,UACpE3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAUoC,SAAS/K,KAAMhC,MAAOjB,OAAQ,EAAG,YAAa,YAC7D,GAAIiB,MAAQ,EAAGA,MAAQ,WAAaA,MAAQ,EAC5CgC,KAAKjD,QAAWiB,QAAU,GAC1BgC,KAAKjD,OAAS,GAAMiB,QAAU,GAC9BgC,KAAKjD,OAAS,GAAMiB,QAAU,EAC9BgC,KAAKjD,OAAS,GAAMiB,MAAQ,IAC5B,OAAOjB,OAAS,GAGlB+B,OAAOa,UAAUkN,gBAAkBpD,oBAAmB,SAASoD,gBAAiB7O,MAAOjB,OAAS,GAC9F,OAAOgP,eAAe/L,KAAMhC,MAAOjB,QAASiN,OAAO,sBAAuBA,OAAO,sBAClF,IAEDlL,OAAOa,UAAUmN,gBAAkBrD,oBAAmB,SAASqD,gBAAiB9O,MAAOjB,OAAS,GAC9F,OAAOkP,eAAejM,KAAMhC,MAAOjB,QAASiN,OAAO,sBAAuBA,OAAO,sBAClF,IAED,SAAS+C,aAAc1M,IAAKrC,MAAOjB,OAAQyL,IAAKzD,IAAK9B,KACnD,GAAIlG,OAASyL,IAAMnI,IAAInF,OAAQ,MAAM,IAAIkF,WAAW,sBACpD,GAAIrD,OAAS,EAAG,MAAM,IAAIqD,WAAW,sBAGvC,SAAS4M,WAAY3M,IAAKrC,MAAOjB,OAAQkQ,aAActE,UACrD3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAU,CACboE,aAAa1M,IAAKrC,MAAOjB,OAAQ,GAEnCH,QAAQmB,MAAMsC,IAAKrC,MAAOjB,OAAQkQ,aAAc,GAAI,GACpD,OAAOlQ,OAAS,EAGlB+B,OAAOa,UAAUuN,aAAe,SAASA,aAAclP,MAAOjB,OAAQ4L,UACpE,OAAOqE,WAAWhN,KAAMhC,MAAOjB,OAAQ,KAAM4L,WAG/C7J,OAAOa,UAAUwN,aAAe,SAASA,aAAcnP,MAAOjB,OAAQ4L,UACpE,OAAOqE,WAAWhN,KAAMhC,MAAOjB,OAAQ,MAAO4L,WAGhD,SAASyE,YAAa/M,IAAKrC,MAAOjB,OAAQkQ,aAActE,UACtD3K,OAASA,MACTjB,OAASA,SAAW,EACpB,IAAK4L,SAAU,CACboE,aAAa1M,IAAKrC,MAAOjB,OAAQ,GAEnCH,QAAQmB,MAAMsC,IAAKrC,MAAOjB,OAAQkQ,aAAc,GAAI,GACpD,OAAOlQ,OAAS,EAGlB+B,OAAOa,UAAU0N,cAAgB,SAASA,cAAerP,MAAOjB,OAAQ4L,UACtE,OAAOyE,YAAYpN,KAAMhC,MAAOjB,OAAQ,KAAM4L,WAGhD7J,OAAOa,UAAU2N,cAAgB,SAASA,cAAetP,MAAOjB,OAAQ4L,UACtE,OAAOyE,YAAYpN,KAAMhC,MAAOjB,OAAQ,MAAO4L,WAIjD7J,OAAOa,UAAU0C,KAAO,SAASA,KAAM6C,OAAQqI,YAAapR,MAAOC,KACjE,IAAK0C,OAAOiB,SAASmF,QAAS,MAAM,IAAI1E,UAAU,+BAClD,IAAKrE,MAAOA,MAAQ,EACpB,IAAKC,KAAOA,MAAQ,EAAGA,IAAM4D,KAAK9E,OAClC,GAAIqS,aAAerI,OAAOhK,OAAQqS,YAAcrI,OAAOhK,OACvD,IAAKqS,YAAaA,YAAc,EAChC,GAAInR,IAAM,GAAKA,IAAMD,MAAOC,IAAMD,MAGlC,GAAIC,MAAQD,MAAO,OAAO,EAC1B,GAAI+I,OAAOhK,SAAW,GAAK8E,KAAK9E,SAAW,EAAG,OAAO,EAGrD,GAAIqS,YAAc,EAAG,CACnB,MAAM,IAAInN,WAAW,6BAEvB,GAAIjE,MAAQ,GAAKA,OAAS6D,KAAK9E,OAAQ,MAAM,IAAIkF,WAAW,sBAC5D,GAAIhE,IAAM,EAAG,MAAM,IAAIgE,WAAW,2BAGlC,GAAIhE,IAAM4D,KAAK9E,OAAQkB,IAAM4D,KAAK9E,OAClC,GAAIgK,OAAOhK,OAASqS,YAAcnR,IAAMD,MAAO,CAC7CC,IAAM8I,OAAOhK,OAASqS,YAAcpR,MAGtC,MAAMlB,IAAMmB,IAAMD,MAElB,GAAI6D,OAASkF,eAAiBrK,WAAW8E,UAAU6N,aAAe,WAAY,CAE5ExN,KAAKwN,WAAWD,YAAapR,MAAOC,IACxC,KAAS,CACLvB,WAAW8E,UAAU4D,IAAIC,KACvB0B,OACAlF,KAAKsI,SAASnM,MAAOC,KACrBmR,aAIJ,OAAOtS,KAOT6D,OAAOa,UAAU+B,KAAO,SAASA,KAAM8D,IAAKrJ,MAAOC,IAAKuF,UAEtD,UAAW6D,MAAQ,SAAU,CAC3B,UAAWrJ,QAAU,SAAU,CAC7BwF,SAAWxF,MACXA,MAAQ,EACRC,IAAM4D,KAAK9E,MACjB,MAAW,UAAWkB,MAAQ,SAAU,CAClCuF,SAAWvF,IACXA,IAAM4D,KAAK9E,OAEb,GAAIyG,WAAa1B,kBAAoB0B,WAAa,SAAU,CAC1D,MAAM,IAAInB,UAAU,6BAEtB,UAAWmB,WAAa,WAAa7C,OAAOiD,WAAWJ,UAAW,CAChE,MAAM,IAAInB,UAAU,qBAAuBmB,UAE7C,GAAI6D,IAAItK,SAAW,EAAG,CACpB,MAAMH,KAAOyK,IAAIrK,WAAW,GAC5B,GAAKwG,WAAa,QAAU5G,KAAO,KAC/B4G,WAAa,SAAU,CAEzB6D,IAAMzK,MAGd,MAAS,UAAWyK,MAAQ,SAAU,CAClCA,IAAMA,IAAM,GAChB,MAAS,UAAWA,MAAQ,UAAW,CACnCA,IAAMa,OAAOb,KAIf,GAAIrJ,MAAQ,GAAK6D,KAAK9E,OAASiB,OAAS6D,KAAK9E,OAASkB,IAAK,CACzD,MAAM,IAAIgE,WAAW,sBAGvB,GAAIhE,KAAOD,MAAO,CAChB,OAAO6D,KAGT7D,MAAQA,QAAU,EAClBC,IAAMA,MAAQ6D,UAAYD,KAAK9E,OAASkB,MAAQ,EAEhD,IAAKoJ,IAAKA,IAAM,EAEhB,IAAIxK,EACJ,UAAWwK,MAAQ,SAAU,CAC3B,IAAKxK,EAAImB,MAAOnB,EAAIoB,MAAOpB,EAAG,CAC5BgF,KAAKhF,GAAKwK,IAEhB,KAAS,CACL,MAAM4C,MAAQtJ,OAAOiB,SAASyF,KAC1BA,IACA1G,OAAO4B,KAAK8E,IAAK7D,UACrB,MAAM1G,IAAMmN,MAAMlN,OAClB,GAAID,MAAQ,EAAG,CACb,MAAM,IAAIuF,UAAU,cAAgBgF,IAClC,qCAEJ,IAAKxK,EAAI,EAAGA,EAAIoB,IAAMD,QAASnB,EAAG,CAChCgF,KAAKhF,EAAImB,OAASiM,MAAMpN,EAAIC,MAIhC,OAAO+E,MAOT,MAAMyN,OAAS,CAAA,EACf,SAASC,EAAGC,IAAKC,WAAYC,MAC3BJ,OAAOE,KAAO,MAAMG,kBAAkBD,KACpCE,cACEC,QAEAvO,OAAOG,eAAeI,KAAM,UAAW,CACrChC,MAAO4P,WAAWlJ,MAAM1E,KAAM0D,WAC9BuK,SAAU,KACVC,aAAc,OAIhBlO,KAAKmO,KAAO,GAAGnO,KAAKmO,SAASR,OAG7B3N,KAAKoO,aAEEpO,KAAKmO,KAGVpT,WACF,OAAO4S,IAGL5S,SAAMiD,OACRyB,OAAOG,eAAeI,KAAM,OAAQ,CAClCkO,aAAc,KACdrO,WAAY,KACZ7B,YACAiQ,SAAU,OAIdtL,WACE,MAAO,GAAG3C,KAAKmO,SAASR,SAAS3N,KAAKqO,YAK5CX,EAAE,4BACA,SAAUS,MACR,GAAIA,KAAM,CACR,MAAO,GAAGA,mCAGZ,MAAO,mDACN/N,YACLsN,EAAE,wBACA,SAAUS,KAAMnM,QACd,MAAO,QAAQmM,+DAA+DnM,WAC7ExB,WACLkN,EAAE,oBACA,SAAU5I,IAAKwJ,MAAOC,OACpB,IAAIC,IAAM,iBAAiB1J,wBAC3B,IAAI2J,SAAWF,MACf,GAAIlI,OAAOqI,UAAUH,QAAU1Q,KAAKM,IAAIoQ,OAAS,GAAK,GAAI,CACxDE,SAAWE,sBAAsBzL,OAAOqL,OAC9C,MAAW,UAAWA,QAAU,SAAU,CACpCE,SAAWvL,OAAOqL,OAClB,GAAIA,MAAQvE,OAAO,IAAMA,OAAO,KAAOuE,QAAUvE,OAAO,IAAMA,OAAO,KAAM,CACzEyE,SAAWE,sBAAsBF,UAEnCA,UAAY,IAEdD,KAAO,eAAeF,mBAAmBG,WACzC,OAAOD,MACNpO,YAEL,SAASuO,sBAAuBnJ,KAC9B,IAAI6B,IAAM,GACV,IAAIrM,EAAIwK,IAAItK,OACZ,MAAMiB,MAAQqJ,IAAI,KAAO,IAAM,EAAI,EACnC,KAAOxK,GAAKmB,MAAQ,EAAGnB,GAAK,EAAG,CAC7BqM,IAAM,IAAI7B,IAAIvD,MAAMjH,EAAI,EAAGA,KAAKqM,MAElC,MAAO,GAAG7B,IAAIvD,MAAM,EAAGjH,KAAKqM,MAM9B,SAASuH,YAAavO,IAAKtD,OAAQxC,YACjCmP,eAAe3M,OAAQ,UACvB,GAAIsD,IAAItD,UAAYkD,WAAaI,IAAItD,OAASxC,cAAgB0F,UAAW,CACvE4J,YAAY9M,OAAQsD,IAAInF,QAAUX,WAAa,KAInD,SAASyR,WAAYhO,MAAOiF,IAAK8B,IAAK1E,IAAKtD,OAAQxC,YACjD,GAAIyD,MAAQ+G,KAAO/G,MAAQiF,IAAK,CAC9B,MAAMqB,SAAWrB,MAAQ,SAAW,IAAM,GAC1C,IAAIqL,MACgB,CAClB,GAAIrL,MAAQ,GAAKA,MAAQ+G,OAAO,GAAI,CAClCsE,MAAQ,OAAOhK,YAAYA,SAAS/J,WAAa,GAAK,IAAI+J,GAClE,KAAa,CACLgK,MAAQ,SAAShK,SAAS/J,WAAa,GAAK,EAAI,IAAI+J,iBAC5C,IAAI/J,WAAa,GAAK,EAAI,IAAI+J,IAE9C,CAGI,MAAM,IAAImJ,OAAOoB,iBAAiB,QAASP,MAAOtQ,OAEpD4Q,YAAYvO,IAAKtD,OAAQxC,YAG3B,SAASmP,eAAgB1L,MAAOmQ,MAC9B,UAAWnQ,QAAU,SAAU,CAC7B,MAAM,IAAIyP,OAAOqB,qBAAqBX,KAAM,SAAUnQ,QAI1D,SAAS6L,YAAa7L,MAAO9C,OAAQsH,MACnC,GAAI3E,KAAKQ,MAAML,SAAWA,MAAO,CAC/B0L,eAAe1L,MAAOwE,MACtB,MAAM,IAAIiL,OAAOoB,iBAAyB,SAAU,aAAc7Q,OAGpE,GAAI9C,OAAS,EAAG,CACd,MAAM,IAAIuS,OAAOsB,yBAGnB,MAAM,IAAItB,OAAOoB,iBAAyB,SACR,MAAiB,YAAY3T,SAC7B8C,OAMpC,MAAMgR,kBAAoB,oBAE1B,SAASC,YAAanK,KAEpBA,IAAMA,IAAIoK,MAAM,KAAK,GAErBpK,IAAMA,IAAIG,OAAOD,QAAQgK,kBAAmB,IAE5C,GAAIlK,IAAI5J,OAAS,EAAG,MAAO,GAE3B,MAAO4J,IAAI5J,OAAS,IAAM,EAAG,CAC3B4J,IAAMA,IAAM,IAEd,OAAOA,IAGT,SAASlB,YAAa9B,OAAQqN,OAC5BA,MAAQA,OAASvR,SACjB,IAAI2J,UACJ,MAAMrM,OAAS4G,OAAO5G,OACtB,IAAIkU,cAAgB,KACpB,MAAMhH,MAAQ,GAEd,IAAK,IAAIpN,EAAI,EAAGA,EAAIE,SAAUF,EAAG,CAC/BuM,UAAYzF,OAAO3G,WAAWH,GAG9B,GAAIuM,UAAY,OAAUA,UAAY,MAAQ,CAE5C,IAAK6H,cAAe,CAElB,GAAI7H,UAAY,MAAQ,CAEtB,IAAK4H,OAAS,IAAM,EAAG/G,MAAM9L,KAAK,IAAM,IAAM,KAC9C,QACV,MAAe,GAAItB,EAAI,IAAME,OAAQ,CAE3B,IAAKiU,OAAS,IAAM,EAAG/G,MAAM9L,KAAK,IAAM,IAAM,KAC9C,SAIF8S,cAAgB7H,UAEhB,SAIF,GAAIA,UAAY,MAAQ,CACtB,IAAK4H,OAAS,IAAM,EAAG/G,MAAM9L,KAAK,IAAM,IAAM,KAC9C8S,cAAgB7H,UAChB,SAIFA,WAAa6H,cAAgB,OAAU,GAAK7H,UAAY,OAAU,KACnE,MAAM,GAAI6H,cAAe,CAExB,IAAKD,OAAS,IAAM,EAAG/G,MAAM9L,KAAK,IAAM,IAAM,KAGhD8S,cAAgB,KAGhB,GAAI7H,UAAY,IAAM,CACpB,IAAK4H,OAAS,GAAK,EAAG,MACtB/G,MAAM9L,KAAKiL,UACjB,MAAW,GAAIA,UAAY,KAAO,CAC5B,IAAK4H,OAAS,GAAK,EAAG,MACtB/G,MAAM9L,KACJiL,WAAa,EAAM,IACnBA,UAAY,GAAO,IAE3B,MAAW,GAAIA,UAAY,MAAS,CAC9B,IAAK4H,OAAS,GAAK,EAAG,MACtB/G,MAAM9L,KACJiL,WAAa,GAAM,IACnBA,WAAa,EAAM,GAAO,IAC1BA,UAAY,GAAO,IAE3B,MAAW,GAAIA,UAAY,QAAU,CAC/B,IAAK4H,OAAS,GAAK,EAAG,MACtB/G,MAAM9L,KACJiL,WAAa,GAAO,IACpBA,WAAa,GAAM,GAAO,IAC1BA,WAAa,EAAM,GAAO,IAC1BA,UAAY,GAAO,IAE3B,KAAW,CACL,MAAM,IAAIjM,MAAM,uBAIpB,OAAO8M,MAGT,SAAStB,aAAchC,KACrB,MAAMuK,UAAY,GAClB,IAAK,IAAIrU,EAAI,EAAGA,EAAI8J,IAAI5J,SAAUF,EAAG,CAEnCqU,UAAU/S,KAAKwI,IAAI3J,WAAWH,GAAK,KAErC,OAAOqU,UAGT,SAASpI,eAAgBnC,IAAKqK,OAC5B,IAAIlR,EAAG8L,GAAID,GACX,MAAMuF,UAAY,GAClB,IAAK,IAAIrU,EAAI,EAAGA,EAAI8J,IAAI5J,SAAUF,EAAG,CACnC,IAAKmU,OAAS,GAAK,EAAG,MAEtBlR,EAAI6G,IAAI3J,WAAWH,GACnB+O,GAAK9L,GAAK,EACV6L,GAAK7L,EAAI,IACToR,UAAU/S,KAAKwN,IACfuF,UAAU/S,KAAKyN,IAGjB,OAAOsF,UAGT,SAASxL,cAAeiB,KACtB,OAAOtG,OAAOhE,YAAYyU,YAAYnK,MAGxC,SAAS8B,WAAY0I,IAAKC,IAAKxS,OAAQ7B,QACrC,IAAIF,EACJ,IAAKA,EAAI,EAAGA,EAAIE,SAAUF,EAAG,CAC3B,GAAKA,EAAI+B,QAAUwS,IAAIrU,QAAYF,GAAKsU,IAAIpU,OAAS,MACrDqU,IAAIvU,EAAI+B,QAAUuS,IAAItU,GAExB,OAAOA,EAMT,SAASgG,WAAYsB,IAAKE,MACxB,OAAOF,eAAeE,MACnBF,KAAO,MAAQA,IAAIyL,aAAe,MAAQzL,IAAIyL,YAAYI,MAAQ,MACjE7L,IAAIyL,YAAYI,OAAS3L,KAAK2L,KAEpC,SAAS5L,YAAaD,KAEpB,OAAOA,MAAQA,IAKjB,MAAM6F,oBAAsB,WAC1B,MAAMqH,SAAW,mBACjB,MAAMC,MAAQ,IAAI3U,MAAM,KACxB,IAAK,IAAIE,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,MAAM0U,IAAM1U,EAAI,GAChB,IAAK,IAAIkL,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3BuJ,MAAMC,IAAMxJ,GAAKsJ,SAASxU,GAAKwU,SAAStJ,IAG5C,OAAOuJ,KACR,CAV2B,GAa5B,SAAShG,mBAAoBkG,IAC3B,cAAc3F,SAAW,YAAc4F,uBAAyBD,GAGlE,SAASC,yBACP,MAAM,IAAItU,MAAM,uBAClB,4DCzjEA,SAASuU,UAAQvL,GACb,IAAK+B,OAAOyJ,cAAcxL,IAAMA,EAAI,EAChC,MAAM,IAAIhJ,MAAM,kCAAoCgJ,EAC5D,CAEA,SAASyL,UAAQjN,GACb,OAAOA,aAAajI,YAAegG,YAAYC,OAAOgC,IAAMA,EAAEiL,YAAYI,OAAS,YACvF,CACA,SAAS6B,SAAO5O,KAAM6O,SAClB,IAAKF,UAAQ3O,GACT,MAAM,IAAI9F,MAAM,uBACpB,GAAI2U,QAAQ/U,OAAS,IAAM+U,QAAQ9J,SAAS/E,EAAElG,QAC1C,MAAM,IAAII,MAAM,iCAAmC2U,QAAU,gBAAkB7O,EAAElG,OACzF,CACA,SAASgV,MAAMC,GACX,UAAWA,IAAM,mBAAqBA,EAAEC,SAAW,WAC/C,MAAM,IAAI9U,MAAM,mDACpBuU,UAAQM,EAAEE,WACVR,UAAQM,EAAEG,SACd,CACA,SAASC,UAAQC,SAAUC,cAAgB,MACvC,GAAID,SAASE,UACT,MAAM,IAAIpV,MAAM,oCACpB,GAAImV,eAAiBD,SAASG,SAC1B,MAAM,IAAIrV,MAAM,wCACxB,CACA,SAASsV,UAAQ1I,IAAKsI,UAClBR,SAAO9H,KACP,MAAMjF,IAAMuN,SAASH,UACrB,GAAInI,IAAIhN,OAAS+H,IAAK,CAClB,MAAM,IAAI3H,MAAM,yDAA2D2H,IACnF,CACA,CChCO,MAAM4N,gBAAgBC,aAAe,UAAY,WAAYA,WAAaA,WAAWD,OAAS5Q;sECkB9F,MAAM8Q,aAAclV,KAAQ,IAAImV,SAASnV,IAAIiB,OAAQjB,IAAIqE,WAAYrE,IAAItB,YAEzE,MAAM0W,OAAO,CAACC,KAAMC,QAAWD,MAAS,GAAKC,MAAWD,OAASC,MAoFjE,SAASvN,cAAYkB,KACxB,UAAWA,MAAQ,SACf,MAAM,IAAIxJ,MAAM,2CAA6CwJ,KACjE,OAAO,IAAIjK,YAAW,IAAIuW,aAAcC,OAAOvM,KACnD,CAMO,SAASwM,UAAQ5O,MACpB,UAAWA,OAAS,SAChBA,KAAOkB,cAAYlB,MACvBsN,SAAOtN,MACP,OAAOA,IACX,CAIO,SAAS6O,iBAAeC,QAC3B,IAAIC,IAAM,EACV,IAAK,IAAIzW,EAAI,EAAGA,EAAIwW,OAAOtW,OAAQF,IAAK,CACpC,MAAM8H,EAAI0O,OAAOxW,GACjBgV,SAAOlN,GACP2O,KAAO3O,EAAE5H,MACjB,CACI,MAAMmM,IAAM,IAAIxM,WAAW4W,KAC3B,IAAK,IAAIzW,EAAI,EAAG0W,IAAM,EAAG1W,EAAIwW,OAAOtW,OAAQF,IAAK,CAC7C,MAAM8H,EAAI0O,OAAOxW,GACjBqM,IAAI9D,IAAIT,EAAG4O,KACXA,KAAO5O,EAAE5H,MACjB,CACI,OAAOmM,GACX,CAEO,IAAAsK,OAAA,MAAMC,KAETC,QACI,OAAO7R,KAAK8R,YACpB,GAQO,SAASC,kBAAgBC,UAC5B,MAAMC,MAASzD,KAAQwD,WAAWE,OAAOZ,UAAQ9C,MAAM2D,SACvD,MAAMvW,IAAMoW,WACZC,MAAM5B,UAAYzU,IAAIyU,UACtB4B,MAAM3B,SAAW1U,IAAI0U,SACrB2B,MAAM7B,OAAS,IAAM4B,WACrB,OAAOC,KACX,CAoBO,SAASG,YAAYC,YAAc,IACtC,GAAIxB,iBAAiBA,SAAOyB,kBAAoB,WAAY,CACxD,OAAOzB,SAAOyB,gBAAgB,IAAIzX,WAAWwX,aACrD,CAEI,GAAIxB,iBAAiBA,SAAOuB,cAAgB,WAAY,CACpD,OAAOvB,SAAOuB,YAAYC,YAClC,CACI,MAAM,IAAI/W,MAAM,yCACpB,CCtLA,SAASiX,eAAaC,KAAMtS,WAAYlC,MAAOhB,MAC3C,UAAWwV,KAAKD,eAAiB,WAC7B,OAAOC,KAAKD,aAAarS,WAAYlC,MAAOhB,MAChD,MAAMyV,KAAOzI,OAAO,IACpB,MAAM0I,SAAW1I,OAAO,YACxB,MAAM2I,GAAKtM,OAAQrI,OAASyU,KAAQC,UACpC,MAAME,GAAKvM,OAAOrI,MAAQ0U,UAC1B,MAAMvC,EAAInT,KAAO,EAAI,EACrB,MAAM6V,EAAI7V,KAAO,EAAI,EACrBwV,KAAKM,UAAU5S,WAAaiQ,EAAGwC,GAAI3V,MACnCwV,KAAKM,UAAU5S,WAAa2S,EAAGD,GAAI5V,KACvC,CAIO,MAAM+V,MAAM,CAACjQ,EAAG1B,EAAGnD,IAAO6E,EAAI1B,GAAO0B,EAAI7E,EAIzC,MAAM+U,MAAM,CAAClQ,EAAG1B,EAAGnD,IAAO6E,EAAI1B,EAAM0B,EAAI7E,EAAMmD,EAAInD,eAKlD,MAAMgV,eAAerB,OACxB7D,YAAYuC,SAAUD,UAAW6C,UAAWlW,MACxCgR,QACAhO,KAAKsQ,SAAWA,SAChBtQ,KAAKqQ,UAAYA,UACjBrQ,KAAKkT,UAAYA,UACjBlT,KAAKhD,KAAOA,KACZgD,KAAK2Q,SAAW,MAChB3Q,KAAK9E,OAAS,EACd8E,KAAKsD,IAAM,EACXtD,KAAK0Q,UAAY,MACjB1Q,KAAKlD,OAAS,IAAIjC,WAAWyV,UAC7BtQ,KAAKwS,KAAOzB,aAAW/Q,KAAKlD,OACpC,CACIoV,OAAOxP,MACH6N,UAAQvQ,MACR,MAAMwS,KAAEA,KAAI1V,OAAEA,OAAMwT,SAAEA,UAAatQ,KACnC0C,KAAO4O,UAAQ5O,MACf,MAAMzH,IAAMyH,KAAKxH,OACjB,IAAK,IAAIoI,IAAM,EAAGA,IAAMrI,KAAM,CAC1B,MAAMkY,KAAOtV,KAAKoF,IAAIqN,SAAWtQ,KAAKsD,IAAKrI,IAAMqI,KAEjD,GAAI6P,OAAS7C,SAAU,CACnB,MAAM8C,SAAWrC,aAAWrO,MAC5B,KAAO4N,UAAYrV,IAAMqI,IAAKA,KAAOgN,SACjCtQ,KAAKqT,QAAQD,SAAU9P,KAC3B,QAChB,CACYxG,OAAOyG,IAAIb,KAAK4F,SAAShF,IAAKA,IAAM6P,MAAOnT,KAAKsD,KAChDtD,KAAKsD,KAAO6P,KACZ7P,KAAO6P,KACP,GAAInT,KAAKsD,MAAQgN,SAAU,CACvBtQ,KAAKqT,QAAQb,KAAM,GACnBxS,KAAKsD,IAAM,CAC3B,CACA,CACQtD,KAAK9E,QAAUwH,KAAKxH,OACpB8E,KAAKsT,aACL,OAAOtT,IACf,CACIuT,WAAWrL,KACPqI,UAAQvQ,MACR4Q,UAAQ1I,IAAKlI,MACbA,KAAK2Q,SAAW,KAIhB,MAAM7T,OAAEA,OAAM0V,KAAEA,KAAIlC,SAAEA,SAAQtT,KAAEA,MAASgD,KACzC,IAAIsD,IAAEA,KAAQtD,KAEdlD,OAAOwG,OAAS,IAChBtD,KAAKlD,OAAOwL,SAAShF,KAAK5B,KAAK,GAG/B,GAAI1B,KAAKkT,UAAY5C,SAAWhN,IAAK,CACjCtD,KAAKqT,QAAQb,KAAM,GACnBlP,IAAM,CAClB,CAEQ,IAAK,IAAItI,EAAIsI,IAAKtI,EAAIsV,SAAUtV,IAC5B8B,OAAO9B,GAAK,EAIhBuX,eAAaC,KAAMlC,SAAW,EAAGtG,OAAOhK,KAAK9E,OAAS,GAAI8B,MAC1DgD,KAAKqT,QAAQb,KAAM,GACnB,MAAMgB,MAAQzC,aAAW7I,KACzB,MAAMjN,IAAM+E,KAAKqQ,UAEjB,GAAIpV,IAAM,EACN,MAAM,IAAIK,MAAM,+CACpB,MAAMmY,OAASxY,IAAM,EACrB,MAAMyY,MAAQ1T,KAAKF,MACnB,GAAI2T,OAASC,MAAMxY,OACf,MAAM,IAAII,MAAM,sCACpB,IAAK,IAAIN,EAAI,EAAGA,EAAIyY,OAAQzY,IACxBwY,MAAMV,UAAU,EAAI9X,EAAG0Y,MAAM1Y,GAAIgC,KAC7C,CACImV,SACI,MAAMrV,OAAEA,OAAMuT,UAAEA,WAAcrQ,KAC9BA,KAAKuT,WAAWzW,QAChB,MAAMuK,IAAMvK,OAAOmF,MAAM,EAAGoO,WAC5BrQ,KAAK2T,UACL,OAAOtM,GACf,CACIyK,WAAW8B,IACPA,KAAOA,GAAK,IAAI5T,KAAK+N,aACrB6F,GAAGrQ,OAAOvD,KAAKF,OACf,MAAMwQ,SAAEA,SAAQxT,OAAEA,OAAM5B,OAAEA,OAAMyV,SAAEA,SAAQD,UAAEA,UAASpN,IAAEA,KAAQtD,KAC/D4T,GAAG1Y,OAASA,OACZ0Y,GAAGtQ,IAAMA,IACTsQ,GAAGjD,SAAWA,SACdiD,GAAGlD,UAAYA,UACf,GAAIxV,OAASoV,SACTsD,GAAG9W,OAAOyG,IAAIzG,QAClB,OAAO8W,EACf,GC7HA,MAAMC,aAA6B7J,OAAO,GAAK,GAAK,GACpD,MAAMyI,OAAuBzI,OAAO,IAGpC,SAAS8J,UAAQxP,EAAGyP,GAAK,OACrB,GAAIA,GACA,MAAO,CAAE5D,EAAG9J,OAAO/B,EAAIuP,cAAahB,EAAGxM,OAAQ/B,GAAKmO,OAAQoB,eAChE,MAAO,CAAE1D,EAAG9J,OAAQ/B,GAAKmO,OAAQoB,cAAc,EAAGhB,EAAGxM,OAAO/B,EAAIuP,cAAc,EAClF,CACA,SAAS3E,QAAM8E,IAAKD,GAAK,OACrB,IAAIE,GAAK,IAAIC,YAAYF,IAAI9Y,QAC7B,IAAIiZ,GAAK,IAAID,YAAYF,IAAI9Y,QAC7B,IAAK,IAAIF,EAAI,EAAGA,EAAIgZ,IAAI9Y,OAAQF,IAAK,CACjC,MAAMmV,EAAEA,EAAC0C,EAAEA,GAAMiB,UAAQE,IAAIhZ,GAAI+Y,KAChCE,GAAGjZ,GAAImZ,GAAGnZ,IAAM,CAACmV,EAAG0C,EAC7B,CACI,MAAO,CAACoB,GAAIE,GAChB,CACA,MAAMC,MAAQ,CAACjE,EAAG0C,IAAO7I,OAAOmG,IAAM,IAAMsC,OAAQzI,OAAO6I,IAAM,GAEjE,MAAMwB,MAAQ,CAAClE,EAAGmE,GAAI5W,IAAMyS,IAAMzS,EAClC,MAAM6W,MAAQ,CAACpE,EAAG0C,EAAGnV,IAAOyS,GAAM,GAAKzS,EAAOmV,IAAMnV,EAEpD,MAAM8W,OAAS,CAACrE,EAAG0C,EAAGnV,IAAOyS,IAAMzS,EAAMmV,GAAM,GAAKnV,EACpD,MAAM+W,OAAS,CAACtE,EAAG0C,EAAGnV,IAAOyS,GAAM,GAAKzS,EAAOmV,IAAMnV,EAErD,MAAMgX,OAAS,CAACvE,EAAG0C,EAAGnV,IAAOyS,GAAM,GAAKzS,EAAOmV,IAAOnV,EAAI,GAC1D,MAAMiX,OAAS,CAACxE,EAAG0C,EAAGnV,IAAOyS,IAAOzS,EAAI,GAAQmV,GAAM,GAAKnV,EAE3D,MAAMkX,QAAU,CAACC,GAAIhC,IAAMA,EAC3B,MAAMiC,QAAU,CAAC3E,EAAGmE,KAAOnE,EAE3B,MAAM4E,SAAS,CAAC5E,EAAG0C,EAAGnV,IAAOyS,GAAKzS,EAAMmV,IAAO,GAAKnV,EACpD,MAAMsX,SAAS,CAAC7E,EAAG0C,EAAGnV,IAAOmV,GAAKnV,EAAMyS,IAAO,GAAKzS,EAEpD,MAAMuX,SAAS,CAAC9E,EAAG0C,EAAGnV,IAAOmV,GAAMnV,EAAI,GAAQyS,IAAO,GAAKzS,EAC3D,MAAMwX,SAAS,CAAC/E,EAAG0C,EAAGnV,IAAOyS,GAAMzS,EAAI,GAAQmV,IAAO,GAAKnV,EAG3D,SAASyX,IAAIlB,GAAIE,GAAIiB,GAAIC,IACrB,MAAMxC,GAAKsB,KAAO,IAAMkB,KAAO,GAC/B,MAAO,CAAElF,EAAI8D,GAAKmB,IAAOvC,EAAI,GAAK,GAAM,GAAM,EAAGA,EAAGA,EAAI,EAC5D,CAEA,MAAMyC,MAAQ,CAACnB,GAAIkB,GAAIE,MAAQpB,KAAO,IAAMkB,KAAO,IAAME,KAAO,GAChE,MAAMC,MAAQ,CAACC,IAAKxB,GAAImB,GAAIM,KAAQzB,GAAKmB,GAAKM,IAAOD,IAAM,GAAK,GAAM,GAAM,EAC5E,MAAME,MAAQ,CAACxB,GAAIkB,GAAIE,GAAIK,MAAQzB,KAAO,IAAMkB,KAAO,IAAME,KAAO,IAAMK,KAAO,GACjF,MAAMC,MAAQ,CAACJ,IAAKxB,GAAImB,GAAIM,GAAII,KAAQ7B,GAAKmB,GAAKM,GAAKI,IAAOL,IAAM,GAAK,GAAM,GAAM,EACrF,MAAMM,MAAQ,CAAC5B,GAAIkB,GAAIE,GAAIK,GAAII,MAAQ7B,KAAO,IAAMkB,KAAO,IAAME,KAAO,IAAMK,KAAO,IAAMI,KAAO,GAClG,MAAMC,MAAQ,CAACR,IAAKxB,GAAImB,GAAIM,GAAII,GAAII,KAAQjC,GAAKmB,GAAKM,GAAKI,GAAKI,IAAOT,IAAM,GAAK,GAAM,GAAM,EAI9F,MAAMU,MAAM,CACZrC,QAAIA,UAAO5E,MAAEA,QAAOkF,YAChBC,YAAOE,YACPC,cAAQC,cAAQC,cAAQC,cACxBC,gBAASE,gBACbC,OAAIA,SAAQC,OAAAA,SAAQC,OAAAA,gBAAQC,SACxBC,QAAKG,YAAOE,YAAOG,YAAOE,YAAOI,YAAOF,aCtD5C,MAAOK,UAAWC,WAA6B,KAAOF,MAAIjH,MAAM,CAC5D,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,qBAClE,qBAAsB,qBAAsB,qBAAsB,sBACpEoH,KAAIhS,GAAK0F,OAAO1F,MArB6B,GAuB/C,MAAMiS,WAA6B,IAAIrC,YAAY,IACnD,MAAMsC,WAA6B,IAAItC,YAAY,IAC5C,MAAMuC,eAAexD,SACxBlF,cACIC,MAAM,IAAK,GAAI,GAAI,OAKnBhO,KAAKiU,GAAK,WAAa,EACvBjU,KAAKmU,GAAK,WAAa,EACvBnU,KAAKoV,GAAK,WAAa,EACvBpV,KAAKqV,GAAK,WAAa,EACvBrV,KAAK0V,GAAK,WAAa,EACvB1V,KAAKuV,GAAK,WAAa,EACvBvV,KAAK8V,GAAK,WAAa,EACvB9V,KAAK4V,GAAK,WAAa,EACvB5V,KAAKkW,GAAK,WAAa,EACvBlW,KAAKgW,GAAK,WAAa,EACvBhW,KAAK0W,GAAK,WAAa,EACvB1W,KAAK2W,GAAK,UAAa,EACvB3W,KAAK4W,GAAK,UAAa,EACvB5W,KAAK6W,GAAK,WAAa,EACvB7W,KAAK8W,GAAK,WAAa,EACvB9W,KAAK+W,GAAK,UAAa,CAC/B,CAEIjX,MACI,MAAMmU,GAAEA,GAAEE,GAAEA,GAAEiB,GAAEA,GAAEC,GAAEA,GAAEK,GAAEA,GAAEH,GAAEA,GAAEO,GAAEA,GAAEF,GAAEA,GAAEM,GAAEA,GAAEF,GAAEA,GAAEU,GAAEA,GAAEC,GAAEA,GAAEC,GAAEA,GAAEC,GAAEA,GAAEC,GAAEA,GAAEC,GAAEA,IAAO/W,KAC3E,MAAO,CAACiU,GAAIE,GAAIiB,GAAIC,GAAIK,GAAIH,GAAIO,GAAIF,GAAIM,GAAIF,GAAIU,GAAIC,GAAIC,GAAIC,GAAIC,GAAIC,GAC5E,CAEIxT,IAAI0Q,GAAIE,GAAIiB,GAAIC,GAAIK,GAAIH,GAAIO,GAAIF,GAAIM,GAAIF,GAAIU,GAAIC,GAAIC,GAAIC,GAAIC,GAAIC,IAC5D/W,KAAKiU,GAAKA,GAAK,EACfjU,KAAKmU,GAAKA,GAAK,EACfnU,KAAKoV,GAAKA,GAAK,EACfpV,KAAKqV,GAAKA,GAAK,EACfrV,KAAK0V,GAAKA,GAAK,EACf1V,KAAKuV,GAAKA,GAAK,EACfvV,KAAK8V,GAAKA,GAAK,EACf9V,KAAK4V,GAAKA,GAAK,EACf5V,KAAKkW,GAAKA,GAAK,EACflW,KAAKgW,GAAKA,GAAK,EACfhW,KAAK0W,GAAKA,GAAK,EACf1W,KAAK2W,GAAKA,GAAK,EACf3W,KAAK4W,GAAKA,GAAK,EACf5W,KAAK6W,GAAKA,GAAK,EACf7W,KAAK8W,GAAKA,GAAK,EACf9W,KAAK+W,GAAKA,GAAK,CACvB,CACI1D,QAAQb,KAAMzV,QAEV,IAAK,IAAI/B,EAAI,EAAGA,EAAI,GAAIA,IAAK+B,QAAU,EAAG,CACtCwZ,WAAWvb,GAAKwX,KAAKwE,UAAUja,QAC/ByZ,WAAWxb,GAAKwX,KAAKwE,UAAWja,QAAU,EACtD,CACQ,IAAK,IAAI/B,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAE1B,MAAMic,KAAOV,WAAWvb,EAAI,IAAM,EAClC,MAAMkc,KAAOV,WAAWxb,EAAI,IAAM,EAClC,MAAMmc,IAAMhB,MAAI3B,OAAOyC,KAAMC,KAAM,GAAKf,MAAI3B,OAAOyC,KAAMC,KAAM,GAAKf,MAAI9B,MAAM4C,KAAMC,KAAM,GAC1F,MAAME,IAAMjB,MAAI1B,OAAOwC,KAAMC,KAAM,GAAKf,MAAI1B,OAAOwC,KAAMC,KAAM,GAAKf,MAAI5B,MAAM0C,KAAMC,KAAM,GAE1F,MAAMG,IAAMd,WAAWvb,EAAI,GAAK,EAChC,MAAMsc,IAAMd,WAAWxb,EAAI,GAAK,EAChC,MAAMuc,IAAMpB,MAAI3B,OAAO6C,IAAKC,IAAK,IAAMnB,MAAIzB,OAAO2C,IAAKC,IAAK,IAAMnB,MAAI9B,MAAMgD,IAAKC,IAAK,GACtF,MAAME,IAAMrB,MAAI1B,OAAO4C,IAAKC,IAAK,IAAMnB,MAAIxB,OAAO0C,IAAKC,IAAK,IAAMnB,MAAI5B,MAAM8C,IAAKC,IAAK,GAEtF,MAAMG,KAAOtB,MAAIR,MAAMyB,IAAKI,IAAKhB,WAAWxb,EAAI,GAAIwb,WAAWxb,EAAI,KACnE,MAAM0c,KAAOvB,MAAIN,MAAM4B,KAAMN,IAAKI,IAAKhB,WAAWvb,EAAI,GAAIub,WAAWvb,EAAI,KACzEub,WAAWvb,GAAK0c,KAAO,EACvBlB,WAAWxb,GAAKyc,KAAO,CACnC,CACQ,IAAIxD,GAAEA,GAAEE,GAAEA,GAAEiB,GAAEA,GAAEC,GAAEA,GAAEK,GAAEA,GAAEH,GAAEA,GAAEO,GAAEA,GAAEF,GAAEA,GAAEM,GAAEA,GAAEF,GAAEA,GAAEU,GAAEA,GAAEC,GAAEA,GAAEC,GAAEA,GAAEC,GAAEA,GAAEC,GAAEA,GAAEC,GAAEA,IAAO/W,KAEzE,IAAK,IAAIhF,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAEzB,MAAM2c,QAAUxB,MAAI3B,OAAO0B,GAAIF,GAAI,IAAMG,MAAI3B,OAAO0B,GAAIF,GAAI,IAAMG,MAAIzB,OAAOwB,GAAIF,GAAI,IACrF,MAAM4B,QAAUzB,MAAI1B,OAAOyB,GAAIF,GAAI,IAAMG,MAAI1B,OAAOyB,GAAIF,GAAI,IAAMG,MAAIxB,OAAOuB,GAAIF,GAAI,IAErF,MAAM6B,KAAQ3B,GAAKQ,IAAQR,GAAKU,GAChC,MAAMkB,KAAQ9B,GAAKW,IAAQX,GAAKa,GAGhC,MAAMkB,KAAO5B,MAAIJ,MAAMgB,GAAIa,QAASE,KAAMzB,UAAUrb,GAAIwb,WAAWxb,IACnE,MAAMgd,IAAM7B,MAAIF,MAAM8B,KAAMjB,GAAIa,QAASE,KAAMzB,UAAUpb,GAAIub,WAAWvb,IACxE,MAAMid,IAAMF,KAAO,EAEnB,MAAMG,QAAU/B,MAAI3B,OAAOP,GAAIE,GAAI,IAAMgC,MAAIzB,OAAOT,GAAIE,GAAI,IAAMgC,MAAIzB,OAAOT,GAAIE,GAAI,IACrF,MAAMgE,QAAUhC,MAAI1B,OAAOR,GAAIE,GAAI,IAAMgC,MAAIxB,OAAOV,GAAIE,GAAI,IAAMgC,MAAIxB,OAAOV,GAAIE,GAAI,IACrF,MAAMiE,KAAQnE,GAAKmB,GAAOnB,GAAKyB,GAAON,GAAKM,GAC3C,MAAM2C,KAAQlE,GAAKkB,GAAOlB,GAAKoB,GAAOF,GAAKE,GAC3CuB,GAAKF,GAAK,EACVG,GAAKF,GAAK,EACVD,GAAKF,GAAK,EACVG,GAAKF,GAAK,EACVD,GAAKR,GAAK,EACVS,GAAKX,GAAK,IACP7F,EAAG+F,GAAIrD,EAAGmD,IAAOG,MAAIhB,IAAIW,GAAK,EAAGF,GAAK,EAAGoC,IAAM,EAAGC,IAAM,IAC3DnC,GAAKJ,GAAK,EACVE,GAAKL,GAAK,EACVG,GAAKN,GAAK,EACVG,GAAKF,GAAK,EACVD,GAAKnB,GAAK,EACVoB,GAAKlB,GAAK,EACV,MAAMmE,IAAMnC,MAAIb,MAAM2C,IAAKE,QAASE,MACpCpE,GAAKkC,MAAIX,MAAM8C,IAAKN,IAAKE,QAASE,MAClCjE,GAAKmE,IAAM,CACvB,GAEWnI,EAAG8D,GAAIpB,EAAGsB,IAAOgC,MAAIhB,IAAInV,KAAKiU,GAAK,EAAGjU,KAAKmU,GAAK,EAAGF,GAAK,EAAGE,GAAK,MAChEhE,EAAGiF,GAAIvC,EAAGwC,IAAOc,MAAIhB,IAAInV,KAAKoV,GAAK,EAAGpV,KAAKqV,GAAK,EAAGD,GAAK,EAAGC,GAAK,MAChElF,EAAGuF,GAAI7C,EAAG0C,IAAOY,MAAIhB,IAAInV,KAAK0V,GAAK,EAAG1V,KAAKuV,GAAK,EAAGG,GAAK,EAAGH,GAAK,MAChEpF,EAAG2F,GAAIjD,EAAG+C,IAAOO,MAAIhB,IAAInV,KAAK8V,GAAK,EAAG9V,KAAK4V,GAAK,EAAGE,GAAK,EAAGF,GAAK,MAChEzF,EAAG+F,GAAIrD,EAAGmD,IAAOG,MAAIhB,IAAInV,KAAKkW,GAAK,EAAGlW,KAAKgW,GAAK,EAAGE,GAAK,EAAGF,GAAK,MAChE7F,EAAGuG,GAAI7D,EAAG8D,IAAOR,MAAIhB,IAAInV,KAAK0W,GAAK,EAAG1W,KAAK2W,GAAK,EAAGD,GAAK,EAAGC,GAAK,MAChExG,EAAGyG,GAAI/D,EAAGgE,IAAOV,MAAIhB,IAAInV,KAAK4W,GAAK,EAAG5W,KAAK6W,GAAK,EAAGD,GAAK,EAAGC,GAAK,MAChE1G,EAAG2G,GAAIjE,EAAGkE,IAAOZ,MAAIhB,IAAInV,KAAK8W,GAAK,EAAG9W,KAAK+W,GAAK,EAAGD,GAAK,EAAGC,GAAK,IACnE/W,KAAKuD,IAAI0Q,GAAIE,GAAIiB,GAAIC,GAAIK,GAAIH,GAAIO,GAAIF,GAAIM,GAAIF,GAAIU,GAAIC,GAAIC,GAAIC,GAAIC,GAAIC,GAC7E,CACIzD,aACIiD,WAAW7U,KAAK,GAChB8U,WAAW9U,KAAK,EACxB,CACIiS,UACI3T,KAAKlD,OAAO4E,KAAK,GACjB1B,KAAKuD,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC9D,EAuEO,MAAMgV,OAAyBxG,mBAAgB,IAAM,IAAI0E;sEC7NhE,MAAM+B,MAAsBxO,OAAO,GACnC,MAAMyO,MAAsBzO,OAAO,GACnC,MAAM0O,MAAsB1O,OAAO,GAC5B,SAAS+F,UAAQjN,GACpB,OAAOA,aAAajI,YAAegG,YAAYC,OAAOgC,IAAMA,EAAEiL,YAAYI,OAAS,YACvF,CACO,SAAS6B,SAAO2I,MACnB,IAAK5I,UAAQ4I,MACT,MAAM,IAAIrd,MAAM,sBACxB,CACO,SAASsd,MAAMC,MAAO7a,OACzB,UAAWA,QAAU,UACjB,MAAM,IAAI1C,MAAMud,MAAQ,0BAA4B7a,MAC5D,CAEA,MAAM8a,MAAwBhe,MAAM4F,KAAK,CAAExF,OAAQ,MAAO,CAAC6d,EAAG/d,IAAMA,EAAE2H,SAAS,IAAIqW,SAAS,EAAG,OAIxF,SAASC,WAAW7Q,OACvB4H,SAAO5H,OAEP,IAAI8Q,IAAM,GACV,IAAK,IAAIle,EAAI,EAAGA,EAAIoN,MAAMlN,OAAQF,IAAK,CACnCke,KAAOJ,MAAM1Q,MAAMpN,GAC3B,CACI,OAAOke,GACX,CACO,SAASC,oBAAoBnd,KAChC,MAAMkd,IAAMld,IAAI2G,SAAS,IACzB,OAAOuW,IAAIhe,OAAS,EAAI,IAAMge,IAAMA,GACxC,CACO,SAASE,YAAYF,KACxB,UAAWA,MAAQ,SACf,MAAM,IAAI5d,MAAM,mCAAqC4d,KACzD,OAAOA,MAAQ,GAAKV,MAAMxO,OAAO,KAAOkP,IAC5C,CAEA,MAAMG,OAAS,CAAEC,GAAI,GAAIC,GAAI,GAAIC,EAAG,GAAIC,EAAG,GAAI3W,EAAG,GAAI4W,EAAG,KACzD,SAASC,cAAcC,IACnB,GAAIA,IAAMP,OAAOC,IAAMM,IAAMP,OAAOE,GAChC,OAAOK,GAAKP,OAAOC,GACvB,GAAIM,IAAMP,OAAOG,GAAKI,IAAMP,OAAOI,EAC/B,OAAOG,IAAMP,OAAOG,EAAI,IAC5B,GAAII,IAAMP,OAAOvW,GAAK8W,IAAMP,OAAOK,EAC/B,OAAOE,IAAMP,OAAOvW,EAAI,IAC5B,MACJ,CAIO,SAAS+W,WAAWX,KACvB,UAAWA,MAAQ,SACf,MAAM,IAAI5d,MAAM,mCAAqC4d,KACzD,MAAMY,GAAKZ,IAAIhe,OACf,MAAM6e,GAAKD,GAAK,EAChB,GAAIA,GAAK,EACL,MAAM,IAAIxe,MAAM,mDAAqDwe,IACzE,MAAM3X,MAAQ,IAAItH,WAAWkf,IAC7B,IAAK,IAAIC,GAAK,EAAGjQ,GAAK,EAAGiQ,GAAKD,GAAIC,KAAMjQ,IAAM,EAAG,CAC7C,MAAMkQ,GAAKN,cAAcT,IAAI/d,WAAW4O,KACxC,MAAMmQ,GAAKP,cAAcT,IAAI/d,WAAW4O,GAAK,IAC7C,GAAIkQ,KAAOha,WAAaia,KAAOja,UAAW,CACtC,MAAMka,KAAOjB,IAAInP,IAAMmP,IAAInP,GAAK,GAChC,MAAM,IAAIzO,MAAM,+CAAiD6e,KAAO,cAAgBpQ,GACpG,CACQ5H,MAAM6X,IAAMC,GAAK,GAAKC,EAC9B,CACI,OAAO/X,KACX,CAEO,SAASiY,gBAAgBhS,OAC5B,OAAOgR,YAAYH,WAAW7Q,OAClC,CACO,SAASiS,gBAAgBjS,OAC5B4H,SAAO5H,OACP,OAAOgR,YAAYH,WAAWpe,WAAW6F,KAAK0H,OAAOkS,WACzD,CACO,SAASC,gBAAgBjW,EAAGrJ,KAC/B,OAAO4e,WAAWvV,EAAE3B,SAAS,IAAIqW,SAAS/d,IAAM,EAAG,KACvD,CACO,SAASuf,gBAAgBlW,EAAGrJ,KAC/B,OAAOsf,gBAAgBjW,EAAGrJ,KAAKqf,SACnC,CAEO,SAASG,mBAAmBnW,GAC/B,OAAOuV,WAAWV,oBAAoB7U,GAC1C,CAUO,SAASoW,YAAY7B,MAAOK,IAAKyB,gBACpC,IAAItT,IACJ,UAAW6R,MAAQ,SAAU,CACzB,IACI7R,IAAMwS,WAAWX,IAC7B,CACQ,MAAO/b,GACH,MAAM,IAAI7B,MAAMud,MAAQ,6CAA+C1b,EACnF,CACA,MACS,GAAI4S,UAAQmJ,KAAM,CAGnB7R,IAAMxM,WAAW6F,KAAKwY,IAC9B,KACS,CACD,MAAM,IAAI5d,MAAMud,MAAQ,oCAChC,CACI,MAAM5d,IAAMoM,IAAInM,OAChB,UAAWyf,iBAAmB,UAAY1f,MAAQ0f,eAC9C,MAAM,IAAIrf,MAAMud,MAAQ,cAAgB8B,eAAiB,kBAAoB1f,KACjF,OAAOoM,GACX,CAIO,SAASkK,eAAeC,QAC3B,IAAIC,IAAM,EACV,IAAK,IAAIzW,EAAI,EAAGA,EAAIwW,OAAOtW,OAAQF,IAAK,CACpC,MAAM8H,EAAI0O,OAAOxW,GACjBgV,SAAOlN,GACP2O,KAAO3O,EAAE5H,MACjB,CACI,MAAMmM,IAAM,IAAIxM,WAAW4W,KAC3B,IAAK,IAAIzW,EAAI,EAAG0W,IAAM,EAAG1W,EAAIwW,OAAOtW,OAAQF,IAAK,CAC7C,MAAM8H,EAAI0O,OAAOxW,GACjBqM,IAAI9D,IAAIT,EAAG4O,KACXA,KAAO5O,EAAE5H,MACjB,CACI,OAAOmM,GACX,CAEO,SAASuT,WAAW9X,EAAG1B,GAC1B,GAAI0B,EAAE5H,SAAWkG,EAAElG,OACf,OAAO,MACX,IAAI2f,KAAO,EACX,IAAK,IAAI7f,EAAI,EAAGA,EAAI8H,EAAE5H,OAAQF,IAC1B6f,MAAQ/X,EAAE9H,GAAKoG,EAAEpG,GACrB,OAAO6f,OAAS,CACpB,CAIO,SAASjX,cAAYkB,KACxB,UAAWA,MAAQ,SACf,MAAM,IAAIxJ,MAAM,mBACpB,OAAO,IAAIT,YAAW,IAAIuW,aAAcC,OAAOvM,KACnD,CAEA,MAAMgW,SAAYxW,UAAaA,IAAM,UAAYkU,OAAOlU,EACjD,SAASyW,QAAQzW,EAAGrB,IAAK8B,KAC5B,OAAO+V,SAASxW,IAAMwW,SAAS7X,MAAQ6X,SAAS/V,MAAQ9B,KAAOqB,GAAKA,EAAIS,GAC5E,CAMO,SAASiW,SAASnC,MAAOvU,EAAGrB,IAAK8B,KAMpC,IAAKgW,QAAQzW,EAAGrB,IAAK8B,KACjB,MAAM,IAAIzJ,MAAM,kBAAoBud,MAAQ,KAAO5V,IAAM,WAAa8B,IAAM,SAAWT,EAC/F,CAMO,SAAS2W,OAAO3W,GACnB,IAAIrJ,IACJ,IAAKA,IAAM,EAAGqJ,EAAIkU,MAAKlU,IAAMmU,MAAKxd,KAAO,GAEzC,OAAOA,GACX,CAMO,SAASigB,OAAO5W,EAAGhB,KACtB,OAAQgB,GAAK0F,OAAO1G,KAAQmV,KAChC,CAIO,SAAS0C,OAAO7W,EAAGhB,IAAKtF,OAC3B,OAAOsG,GAAMtG,MAAQya,MAAMD,QAAQxO,OAAO1G,IAC9C,CAKO,MAAM8X,QAAW9W,IAAOoU,OAAO1O,OAAO1F,EAAI,IAAMmU,MAEvD,MAAM4C,IAAO3Y,MAAS,IAAI7H,WAAW6H,MACrC,MAAM4Y,KAAQzf,KAAQhB,WAAW6F,KAAK7E,KAQ/B,SAAS0f,eAAeC,QAASC,SAAUC,QAC9C,UAAWF,UAAY,UAAYA,QAAU,EACzC,MAAM,IAAIlgB,MAAM,4BACpB,UAAWmgB,WAAa,UAAYA,SAAW,EAC3C,MAAM,IAAIngB,MAAM,6BACpB,UAAWogB,SAAW,WAClB,MAAM,IAAIpgB,MAAM,6BAEpB,IAAIqgB,EAAIN,IAAIG,SACZ,IAAII,EAAIP,IAAIG,SACZ,IAAIxgB,EAAI,EACR,MAAM6gB,MAAQ,KACVF,EAAEja,KAAK,GACPka,EAAEla,KAAK,GACP1G,EAAI,CAAC,EAET,MAAMmV,EAAI,IAAI/O,IAAMsa,OAAOE,EAAGD,KAAMva,GACpC,MAAM0a,OAAS,CAACC,KAAOV,SAEnBO,EAAIzL,EAAEmL,KAAK,CAAC,IAAQS,MACpBJ,EAAIxL,IACJ,GAAI4L,KAAK7gB,SAAW,EAChB,OACJ0gB,EAAIzL,EAAEmL,KAAK,CAAC,IAAQS,MACpBJ,EAAIxL,GAAG,EAEX,MAAM6L,IAAM,KAER,GAAIhhB,KAAO,IACP,MAAM,IAAIM,MAAM,2BACpB,IAAIL,IAAM,EACV,MAAMiN,IAAM,GACZ,MAAOjN,IAAMwgB,SAAU,CACnBE,EAAIxL,IACJ,MAAM8L,GAAKN,EAAE1Z,QACbiG,IAAI5L,KAAK2f,IACThhB,KAAO0gB,EAAEzgB,MACrB,CACQ,OAAOqW,eAAerJ,IAAI,EAE9B,MAAMgU,SAAW,CAACH,KAAMI,QACpBN,QACAC,OAAOC,MACP,IAAI1U,IAAMpH,UACV,QAASoH,IAAM8U,KAAKH,QAChBF,SACJD,QACA,OAAOxU,GAAG,EAEd,OAAO6U,QACX,CAEA,MAAME,aAAe,CACjBC,OAAS7W,YAAeA,MAAQ,SAChC8W,SAAW9W,YAAeA,MAAQ,WAClC+W,QAAU/W,YAAeA,MAAQ,UACjC1D,OAAS0D,YAAeA,MAAQ,SAChCgX,mBAAqBhX,YAAeA,MAAQ,UAAYuK,UAAQvK,KAChEsK,cAAgBtK,KAAQa,OAAOyJ,cAActK,KAC7CrD,MAAQqD,KAAQ1K,MAAM2H,QAAQ+C,KAC9BiX,MAAO,CAACjX,IAAKkX,SAAWA,OAAOC,GAAGC,QAAQpX,KAC1CqX,KAAOrX,YAAeA,MAAQ,YAAca,OAAOyJ,cAActK,IAAI6K,YAGlE,SAASyM,eAAeJ,OAAQK,WAAYC,cAAgB,CAAA,GAC/D,MAAMC,WAAa,CAACC,UAAW1a,KAAM2a,cACjC,MAAMC,SAAWhB,aAAa5Z,MAC9B,UAAW4a,WAAa,WACpB,MAAM,IAAI9hB,MAAM,8BACpB,MAAMkK,IAAMkX,OAAOQ,WACnB,GAAIC,YAAc3X,MAAQvF,UACtB,OACJ,IAAKmd,SAAS5X,IAAKkX,QAAS,CACxB,MAAM,IAAIphB,MAAM,SAAW4H,OAAOga,WAAa,yBAA2B1a,KAAO,SAAWgD,IACxG,GAEI,IAAK,MAAO0X,UAAW1a,QAAS/C,OAAO4d,QAAQN,YAC3CE,WAAWC,UAAW1a,KAAM,OAChC,IAAK,MAAO0a,UAAW1a,QAAS/C,OAAO4d,QAAQL,eAC3CC,WAAWC,UAAW1a,KAAM,MAChC,OAAOka,MACX,CAYO,MAAMY,eAAiB,KAC1B,MAAM,IAAIhiB,MAAM,kBAAkB,EAM/B,SAASiiB,SAAS5N,IACrB,MAAM2G,IAAM,IAAIkH,QAChB,MAAO,CAACld,OAAQmd,QACZ,MAAMjY,IAAM8Q,IAAIxW,IAAIQ,KACpB,GAAIkF,MAAQvF,UACR,OAAOuF,IACX,MAAMkY,SAAW/N,GAAGrP,OAAQmd,MAC5BnH,IAAI/S,IAAIjD,IAAKod,UACb,OAAOA,QAAQ,CAEvB;sECrUA,MAAMlF,MAAMxO,OAAO,GAAIyO,MAAMzO,OAAO,GAAI0O,MAAsB1O,OAAO,GAAI2T,MAAsB3T,OAAO,GAEtG,MAAM4T,IAAsB5T,OAAO,GAAI6T,MAAsB7T,OAAO,GAAI8T,MAAsB9T,OAAO,GAI9F,SAAS+T,IAAIjb,EAAG1B,GACnB,MAAM4c,OAASlb,EAAI1B,EACnB,OAAO4c,QAAUxF,MAAMwF,OAAS5c,EAAI4c,MACxC,CAQO,SAASlgB,IAAI9B,IAAKiiB,MAAOC,QAC5B,GAAID,MAAQzF,MACR,MAAM,IAAIld,MAAM,2CACpB,GAAI4iB,QAAU1F,MACV,MAAM,IAAIld,MAAM,mBACpB,GAAI4iB,SAAWzF,MACX,OAAOD,MACX,IAAInR,IAAMoR,MACV,MAAOwF,MAAQzF,MAAK,CAChB,GAAIyF,MAAQxF,MACRpR,IAAOA,IAAMrL,IAAOkiB,OACxBliB,IAAOA,IAAMA,IAAOkiB,OACpBD,QAAUxF,KAClB,CACI,OAAOpR,GACX,CAEO,SAAS8W,KAAKpb,EAAGkb,MAAOC,QAC3B,IAAI7W,IAAMtE,EACV,MAAOkb,SAAUzF,MAAK,CAClBnR,KAAOA,IACPA,KAAO6W,MACf,CACI,OAAO7W,GACX,CAEO,SAAS+W,OAAOC,OAAQH,QAC3B,GAAIG,SAAW7F,MACX,MAAM,IAAIld,MAAM,oCACpB,GAAI4iB,QAAU1F,MACV,MAAM,IAAIld,MAAM,0CAA4C4iB,QAGhE,IAAIpb,EAAIib,IAAIM,OAAQH,QACpB,IAAI9c,EAAI8c,OAEL,IAACnb,EAAIyV,MAAc8F,EAAI7F,MAC1B,MAAO3V,IAAM0V,MAAK,CAEd,MAAM+F,EAAInd,EAAI0B,EACd,MAAM0b,EAAIpd,EAAI0B,EACd,MAAM1F,EAAI2F,EAAIub,EAAIC,EAGlBnd,EAAI0B,EAAGA,EAAI0b,EAAGzb,EAAIub,EAAUA,EAAIlhB,CACxC,CACI,MAAMqhB,IAAMrd,EACZ,GAAIqd,MAAQhG,MACR,MAAM,IAAInd,MAAM,0BACpB,OAAOyiB,IAAIhb,EAAGmb,OAClB,CASO,SAASQ,cAAcC,GAM1B,MAAMC,WAAaD,EAAIlG,OAAOC,MAC9B,IAAImG,EAAGC,EAAGC,EAGV,IAAKF,EAAIF,EAAIlG,MAAKqG,EAAI,EAAGD,EAAInG,QAAQF,MAAKqG,GAAKnG,MAAKoG,KAGpD,IAAKC,EAAIrG,MAAKqG,EAAIJ,GAAK7gB,IAAIihB,EAAGH,UAAWD,KAAOA,EAAIlG,MAAKsG,IAAK,CAE1D,GAAIA,EAAI,IACJ,MAAM,IAAIzjB,MAAM,8CAC5B,CAEI,GAAIwjB,IAAM,EAAG,CACT,MAAME,QAAUL,EAAIlG,OAAOmF,IAC3B,OAAO,SAASqB,YAAYtC,GAAIrY,GAC5B,MAAM4a,KAAOvC,GAAG7e,IAAIwG,EAAG0a,QACvB,IAAKrC,GAAGwC,IAAIxC,GAAGyC,IAAIF,MAAO5a,GACtB,MAAM,IAAIhJ,MAAM,2BACpB,OAAO4jB,IACV,CACT,CAEI,MAAMG,QAAUR,EAAIpG,OAAOC,MAC3B,OAAO,SAAS4G,YAAY3C,GAAIrY,GAE5B,GAAIqY,GAAG7e,IAAIwG,EAAGsa,aAAejC,GAAG4C,IAAI5C,GAAG6C,KACnC,MAAM,IAAIlkB,MAAM,2BACpB,IAAIkjB,EAAIM,EAER,IAAIW,EAAI9C,GAAG7e,IAAI6e,GAAG/T,IAAI+T,GAAG6C,IAAKT,GAAIF,GAClC,IAAI9b,EAAI4Z,GAAG7e,IAAIwG,EAAG+a,QAClB,IAAIje,EAAIub,GAAG7e,IAAIwG,EAAGua,GAClB,OAAQlC,GAAGwC,IAAI/d,EAAGub,GAAG6C,KAAM,CACvB,GAAI7C,GAAGwC,IAAI/d,EAAGub,GAAG+C,MACb,OAAO/C,GAAG+C,KAEd,IAAItiB,EAAI,EACR,IAAK,IAAIuiB,GAAKhD,GAAGyC,IAAIhe,GAAIhE,EAAIohB,EAAGphB,IAAK,CACjC,GAAIuf,GAAGwC,IAAIQ,GAAIhD,GAAG6C,KACd,MACJG,GAAKhD,GAAGyC,IAAIO,GAC5B,CAEY,MAAMC,GAAKjD,GAAG7e,IAAI2hB,EAAGhH,OAAOzO,OAAOwU,EAAIphB,EAAI,IAC3CqiB,EAAI9C,GAAGyC,IAAIQ,IACX7c,EAAI4Z,GAAG/T,IAAI7F,EAAG6c,IACdxe,EAAIub,GAAG/T,IAAIxH,EAAGqe,GACdjB,EAAIphB,CAChB,CACQ,OAAO2F,CACV,CACL,CACO,SAAS8c,OAAOlB,GAKnB,GAAIA,EAAIf,MAAQD,MAAK,CAKjB,MAAMqB,QAAUL,EAAIlG,OAAOmF,IAC3B,OAAO,SAASkC,UAAUnD,GAAIrY,GAC1B,MAAM4a,KAAOvC,GAAG7e,IAAIwG,EAAG0a,QAEvB,IAAKrC,GAAGwC,IAAIxC,GAAGyC,IAAIF,MAAO5a,GACtB,MAAM,IAAIhJ,MAAM,2BACpB,OAAO4jB,IACV,CACT,CAEI,GAAIP,EAAIb,QAAQD,MAAK,CACjB,MAAMkC,IAAMpB,EAAId,OAAOC,MACvB,OAAO,SAASkC,UAAUrD,GAAIrY,GAC1B,MAAM4V,GAAKyC,GAAG/T,IAAItE,EAAGoU,OACrB,MAAMiD,EAAIgB,GAAG7e,IAAIoc,GAAI6F,IACrB,MAAME,GAAKtD,GAAG/T,IAAItE,EAAGqX,GACrB,MAAM3gB,EAAI2hB,GAAG/T,IAAI+T,GAAG/T,IAAIqX,GAAIvH,OAAMiD,GAClC,MAAMuD,KAAOvC,GAAG/T,IAAIqX,GAAItD,GAAGrQ,IAAItR,EAAG2hB,GAAG6C,MACrC,IAAK7C,GAAGwC,IAAIxC,GAAGyC,IAAIF,MAAO5a,GACtB,MAAM,IAAIhJ,MAAM,2BACpB,OAAO4jB,IACV,CACT,CAwBI,OAAOR,cAAcC,EACzB,CAEO,MAAMuB,aAAe,CAAClkB,IAAKkiB,UAAYH,IAAI/hB,IAAKkiB,QAAUzF,SAASA,MAE1E,MAAM0H,aAAe,CACjB,SAAU,UAAW,MAAO,MAAO,MAAO,OAAQ,MAClD,MAAO,MAAO,MAAO,MAAO,MAAO,MACnC,OAAQ,OAAQ,OAAQ,QAErB,SAASC,cAAc3D,OAC1B,MAAM4D,QAAU,CACZC,MAAO,SACPC,KAAM,SACNC,MAAO,gBACPC,KAAM,iBAEV,MAAMC,KAAOP,aAAaQ,QAAO,CAACrK,IAAK9Q,OACnC8Q,IAAI9Q,KAAO,WACX,OAAO8Q,GAAG,GACX+J,SACH,OAAOvD,eAAeL,MAAOiE,KACjC,CAMO,SAASE,MAAMlH,EAAG1d,IAAKiiB,OAG1B,GAAIA,MAAQzF,MACR,MAAM,IAAIld,MAAM,2CACpB,GAAI2iB,QAAUzF,MACV,OAAOkB,EAAE8F,IACb,GAAIvB,QAAUxF,MACV,OAAOzc,IACX,IAAI6kB,EAAInH,EAAE8F,IACV,IAAI/hB,EAAIzB,IACR,MAAOiiB,MAAQzF,MAAK,CAChB,GAAIyF,MAAQxF,MACRoI,EAAInH,EAAE9Q,IAAIiY,EAAGpjB,GACjBA,EAAIic,EAAE0F,IAAI3hB,GACVwgB,QAAUxF,KAClB,CACI,OAAOoI,CACX,CAKO,SAASC,cAAcpH,EAAGqH,MAC7B,MAAMnlB,IAAM,IAAId,MAAMimB,KAAK7lB,QAE3B,MAAM8lB,eAAiBD,KAAKJ,QAAO,CAACM,IAAKjlB,IAAKhB,KAC1C,GAAI0e,EAAEwH,IAAIllB,KACN,OAAOilB,IACXrlB,IAAIZ,GAAKimB,IACT,OAAOvH,EAAE9Q,IAAIqY,IAAKjlB,IAAI,GACvB0d,EAAE8F,KAEL,MAAM2B,SAAWzH,EAAE0H,IAAIJ,gBAEvBD,KAAKM,aAAY,CAACJ,IAAKjlB,IAAKhB,KACxB,GAAI0e,EAAEwH,IAAIllB,KACN,OAAOilB,IACXrlB,IAAIZ,GAAK0e,EAAE9Q,IAAIqY,IAAKrlB,IAAIZ,IACxB,OAAO0e,EAAE9Q,IAAIqY,IAAKjlB,IAAI,GACvBmlB,UACH,OAAOvlB,GACX,CAoBO,SAAS0lB,QAAQhd,EAAGid,YAEvB,MAAMC,YAAcD,aAAethB,UAAYshB,WAAajd,EAAE3B,SAAS,GAAGzH,OAC1E,MAAMumB,YAAc5jB,KAAK6jB,KAAKF,YAAc,GAC5C,MAAO,CAAED,WAAYC,YAAaC,wBACtC,CAgBO,SAASE,MAAMrB,MAAOrF,OAAQje,KAAO,MAAO4kB,MAAQ,IACvD,GAAItB,OAAS9H,MACT,MAAM,IAAIld,MAAM,0CAA4CglB,OAChE,MAAQiB,WAAYd,KAAMgB,YAAajB,OAAUc,QAAQhB,MAAOrF,QAChE,GAAIuF,MAAQ,KACR,MAAM,IAAIllB,MAAM,kDACpB,IAAIumB,MACJ,MAAMnI,EAAIja,OAAOqiB,OAAO,CACpBxB,YACAG,UACAD,YACAD,KAAMnF,QAAQqF,MACdf,KAAMlH,MACNgH,IAAK/G,MACLrI,OAASpU,KAAQ+hB,IAAI/hB,IAAKskB,OAC1B1D,QAAU5gB,MACN,UAAWA,MAAQ,SACf,MAAM,IAAIV,MAAM,sDAAwDU,KAC5E,OAAOwc,OAAOxc,KAAOA,IAAMskB,KAAK,EAEpCY,IAAMllB,KAAQA,MAAQwc,MACtBuJ,MAAQ/lB,MAASA,IAAMyc,SAASA,MAChC8G,IAAMvjB,KAAQ+hB,KAAK/hB,IAAKskB,OACxBnB,IAAK,CAAC6C,IAAKC,MAAQD,MAAQC,IAC3B7C,IAAMpjB,KAAQ+hB,IAAI/hB,IAAMA,IAAKskB,OAC7BnL,IAAK,CAAC6M,IAAKC,MAAQlE,IAAIiE,IAAMC,IAAK3B,OAClChU,IAAK,CAAC0V,IAAKC,MAAQlE,IAAIiE,IAAMC,IAAK3B,OAClC1X,IAAK,CAACoZ,IAAKC,MAAQlE,IAAIiE,IAAMC,IAAK3B,OAClCxiB,IAAK,CAAC9B,IAAKiiB,QAAU2C,MAAMlH,EAAG1d,IAAKiiB,OACnCiE,IAAK,CAACF,IAAKC,MAAQlE,IAAIiE,IAAM5D,OAAO6D,IAAK3B,OAAQA,OAEjD6B,KAAOnmB,KAAQA,IAAMA,IACrBomB,KAAM,CAACJ,IAAKC,MAAQD,IAAMC,IAC1BI,KAAM,CAACL,IAAKC,MAAQD,IAAMC,IAC1BK,KAAM,CAACN,IAAKC,MAAQD,IAAMC,IAC1Bb,IAAMplB,KAAQoiB,OAAOpiB,IAAKskB,OAC1BiC,KAAMX,MAAMW,MACP,CAACje,IACE,IAAKud,MACDA,MAAQhC,OAAOS,OACnB,OAAOuB,MAAMnI,EAAGpV,EACnB,GACLke,YAAcxO,KAAQ8M,cAAcpH,EAAG1F,KAGvCyO,KAAM,CAAC3f,EAAG1B,EAAGnD,IAAOA,EAAImD,EAAI0B,EAC5BwO,QAAUtV,KAASgB,KAAOwd,gBAAgBxe,IAAKwkB,OAASjG,gBAAgBve,IAAKwkB,OAC7EkC,UAAYta,QACR,GAAIA,MAAMlN,SAAWslB,MACjB,MAAM,IAAIllB,MAAM,6BAA+BklB,MAAQ,eAAiBpY,MAAMlN,QAClF,OAAO8B,KAAOqd,gBAAgBjS,OAASgS,gBAAgBhS,MAAM,IAGrE,OAAO3I,OAAOqiB,OAAOpI,EACzB,CAkCO,SAASiJ,oBAAoBC,YAChC,UAAWA,aAAe,SACtB,MAAM,IAAItnB,MAAM,8BACpB,MAAMunB,UAAYD,WAAWjgB,SAAS,GAAGzH,OACzC,OAAO2C,KAAK6jB,KAAKmB,UAAY,EACjC,CAQO,SAASC,iBAAiBF,YAC7B,MAAM1nB,OAASynB,oBAAoBC,YACnC,OAAO1nB,OAAS2C,KAAK6jB,KAAKxmB,OAAS,EACvC,CAcO,SAAS6nB,eAAeC,IAAKJ,WAAY5lB,KAAO,OACnD,MAAM/B,IAAM+nB,IAAI9nB,OAChB,MAAM+nB,SAAWN,oBAAoBC,YACrC,MAAMM,OAASJ,iBAAiBF,YAEhC,GAAI3nB,IAAM,IAAMA,IAAMioB,QAAUjoB,IAAM,KAClC,MAAM,IAAIK,MAAM,YAAc4nB,OAAS,6BAA+BjoB,KAC1E,MAAMe,IAAMgB,KAAOod,gBAAgB4I,KAAO3I,gBAAgB2I,KAE1D,MAAMG,QAAUpF,IAAI/hB,IAAK4mB,WAAanK,OAAOA,MAC7C,OAAOzb,KAAOwd,gBAAgB2I,QAASF,UAAY1I,gBAAgB4I,QAASF,SAChF;sEC/aA,MAAMzK,MAAMxO,OAAO,GACnB,MAAMyO,MAAMzO,OAAO,GACnB,SAASoZ,gBAAgBC,UAAW1K,MAChC,MAAM4G,IAAM5G,KAAK2K,SACjB,OAAOD,UAAY9D,IAAM5G,IAC7B,CACA,SAAS4K,UAAUC,EAAGC,MAClB,IAAKpd,OAAOyJ,cAAc0T,IAAMA,GAAK,GAAKA,EAAIC,KAC1C,MAAM,IAAInoB,MAAM,qCAAuCmoB,KAAO,YAAcD,EACpF,CACA,SAASE,UAAUF,EAAGC,MAClBF,UAAUC,EAAGC,MACb,MAAME,QAAU9lB,KAAK6jB,KAAK+B,KAAOD,GAAK,EACtC,MAAMI,WAAa,IAAMJ,EAAI,GAC7B,MAAO,CAAEG,gBAASC,sBACtB,CACA,SAASC,kBAAkBC,OAAQ7lB,GAC/B,IAAKnD,MAAM2H,QAAQqhB,QACf,MAAM,IAAIxoB,MAAM,kBACpBwoB,OAAOC,SAAQ,CAAClD,EAAG7lB,KACf,KAAM6lB,aAAa5iB,GACf,MAAM,IAAI3C,MAAM,0BAA4BN,EAAE,GAE1D,CACA,SAASgpB,mBAAmBC,QAASxH,OACjC,IAAK3hB,MAAM2H,QAAQwhB,SACf,MAAM,IAAI3oB,MAAM,6BACpB2oB,QAAQF,SAAQ,CAACrmB,EAAG1C,KAChB,IAAKyhB,MAAMG,QAAQlf,GACf,MAAM,IAAIpC,MAAM,2BAA6BN,EAAE,GAE3D,CAGA,MAAMkpB,iBAAmB,IAAI1G,QAC7B,MAAM2G,iBAAmB,IAAI3G,QAC7B,SAAS4G,KAAKzF,GACV,OAAOwF,iBAAiBrkB,IAAI6e,IAAM,CACtC,CAYO,SAAS0F,KAAKpmB,EAAGwlB,MACpB,MAAO,CACHL,gCACAkB,eAAeC,KACX,OAAOH,KAAKG,OAAS,CACxB,EAEDC,aAAaD,IAAKjgB,EAAGuc,EAAI5iB,EAAEyhB,MACvB,IAAIjiB,EAAI8mB,IACR,MAAOjgB,EAAIkU,MAAK,CACZ,GAAIlU,EAAImU,MACJoI,EAAIA,EAAE1L,IAAI1X,GACdA,EAAIA,EAAEgnB,SACNngB,IAAMmU,KACtB,CACY,OAAOoI,CACV,EAaD6D,iBAAiBH,IAAKf,GAClB,MAAMG,QAAEA,QAAOC,WAAEA,YAAeF,UAAUF,EAAGC,MAC7C,MAAMK,OAAS,GACf,IAAIjD,EAAI0D,IACR,IAAII,KAAO9D,EACX,IAAK,IAAI+D,OAAS,EAAGA,OAASjB,QAASiB,SAAU,CAC7CD,KAAO9D,EACPiD,OAAOxnB,KAAKqoB,MAEZ,IAAK,IAAI3pB,EAAI,EAAGA,EAAI4oB,WAAY5oB,IAAK,CACjC2pB,KAAOA,KAAKxP,IAAI0L,GAChBiD,OAAOxnB,KAAKqoB,KAChC,CACgB9D,EAAI8D,KAAKF,QACzB,CACY,OAAOX,MACV,EAQDO,KAAKb,EAAGqB,YAAavgB,GAGjB,MAAMqf,QAAEA,QAAOC,WAAEA,YAAeF,UAAUF,EAAGC,MAC7C,IAAI5C,EAAI5iB,EAAEyhB,KACV,IAAIhG,EAAIzb,EAAE6mB,KACV,MAAMC,KAAO/a,OAAO,GAAKwZ,EAAI,GAC7B,MAAMwB,UAAY,GAAKxB,EACvB,MAAMyB,QAAUjb,OAAOwZ,GACvB,IAAK,IAAIoB,OAAS,EAAGA,OAASjB,QAASiB,SAAU,CAC7C,MAAM7nB,OAAS6nB,OAAShB,WAExB,IAAIsB,MAAQ7e,OAAO/B,EAAIygB,MAEvBzgB,IAAM2gB,QAGN,GAAIC,MAAQtB,WAAY,CACpBsB,OAASF,UACT1gB,GAAKmU,KACzB,CAQgB,MAAM0M,QAAUpoB,OAChB,MAAMqoB,QAAUroB,OAASc,KAAKM,IAAI+mB,OAAS,EAC3C,MAAMG,MAAQT,OAAS,IAAM,EAC7B,MAAMU,MAAQJ,MAAQ,EACtB,GAAIA,QAAU,EAAG,CAEbxL,EAAIA,EAAEvE,IAAIiO,gBAAgBiC,MAAOR,YAAYM,UACjE,KACqB,CACDtE,EAAIA,EAAE1L,IAAIiO,gBAAgBkC,MAAOT,YAAYO,UACjE,CACA,CAMY,MAAO,CAAEvE,IAAGnH,IACf,EASD6L,WAAW/B,EAAGqB,YAAavgB,EAAG2c,IAAMhjB,EAAEyhB,MAClC,MAAMiE,QAAEA,QAAOC,WAAEA,YAAeF,UAAUF,EAAGC,MAC7C,MAAMsB,KAAO/a,OAAO,GAAKwZ,EAAI,GAC7B,MAAMwB,UAAY,GAAKxB,EACvB,MAAMyB,QAAUjb,OAAOwZ,GACvB,IAAK,IAAIoB,OAAS,EAAGA,OAASjB,QAASiB,SAAU,CAC7C,MAAM7nB,OAAS6nB,OAAShB,WACxB,GAAItf,IAAMkU,MACN,MAEJ,IAAI0M,MAAQ7e,OAAO/B,EAAIygB,MAEvBzgB,IAAM2gB,QAGN,GAAIC,MAAQtB,WAAY,CACpBsB,OAASF,UACT1gB,GAAKmU,KACzB,CACgB,GAAIyM,QAAU,EACV,SACJ,IAAIM,KAAOX,YAAY9nB,OAASc,KAAKM,IAAI+mB,OAAS,GAClD,GAAIA,MAAQ,EACRM,KAAOA,KAAKlC,SAEhBrC,IAAMA,IAAI9L,IAAIqQ,KAC9B,CACY,OAAOvE,GACV,EACDwE,eAAejC,EAAG7E,EAAG+G,WAEjB,IAAIC,KAAOzB,iBAAiBpkB,IAAI6e,GAChC,IAAKgH,KAAM,CACPA,KAAO3lB,KAAK0kB,iBAAiB/F,EAAG6E,GAChC,GAAIA,IAAM,EACNU,iBAAiB3gB,IAAIob,EAAG+G,UAAUC,MACtD,CACY,OAAOA,IACV,EACDC,WAAWjH,EAAGra,EAAGohB,WACb,MAAMlC,EAAIY,KAAKzF,GACf,OAAO3e,KAAKqkB,KAAKb,EAAGxjB,KAAKylB,eAAejC,EAAG7E,EAAG+G,WAAYphB,EAC7D,EACDuhB,iBAAiBlH,EAAGra,EAAGohB,UAAWI,MAC9B,MAAMtC,EAAIY,KAAKzF,GACf,GAAI6E,IAAM,EACN,OAAOxjB,KAAKwkB,aAAa7F,EAAGra,EAAGwhB,MACnC,OAAO9lB,KAAKulB,WAAW/B,EAAGxjB,KAAKylB,eAAejC,EAAG7E,EAAG+G,WAAYphB,EAAGwhB,KACtE,EAIDC,cAAcpH,EAAG6E,GACbD,UAAUC,EAAGC,MACbU,iBAAiB5gB,IAAIob,EAAG6E,GACxBU,iBAAiB8B,OAAOrH,EAC3B,EAET,CAWO,SAASsH,UAAUhoB,EAAGioB,OAAQpC,OAAQG,SAOzCJ,kBAAkBC,OAAQ7lB,GAC1B+lB,mBAAmBC,QAASiC,QAC5B,GAAIpC,OAAO5oB,SAAW+oB,QAAQ/oB,OAC1B,MAAM,IAAII,MAAM,uDACpB,MAAM6qB,KAAOloB,EAAEyhB,KACf,MAAMwF,MAAQjK,OAAOjR,OAAO8Z,OAAO5oB,SACnC,MAAM0oB,WAAasB,MAAQ,GAAKA,MAAQ,EAAIA,MAAQ,EAAIA,MAAQ,EAAIA,MAAQ,EAAI,EAChF,MAAM3E,MAAQ,GAAKqD,YAAc,EACjC,MAAMwC,QAAU,IAAItrB,MAAMylB,KAAO,GAAG7e,KAAKykB,MACzC,MAAME,SAAWxoB,KAAKQ,OAAO6nB,OAAOzF,KAAO,GAAKmD,YAAcA,WAC9D,IAAInS,IAAM0U,KACV,IAAK,IAAInrB,EAAIqrB,SAAUrrB,GAAK,EAAGA,GAAK4oB,WAAY,CAC5CwC,QAAQ1kB,KAAKykB,MACb,IAAK,IAAIjgB,EAAI,EAAGA,EAAI+d,QAAQ/oB,OAAQgL,IAAK,CACrC,MAAMogB,OAASrC,QAAQ/d,GACvB,MAAMgf,MAAQ7e,OAAQigB,QAAUtc,OAAOhP,GAAMgP,OAAOuW,OACpD6F,QAAQlB,OAASkB,QAAQlB,OAAO/P,IAAI2O,OAAO5d,GACvD,CACQ,IAAIqgB,KAAOJ,KAEX,IAAK,IAAIjgB,EAAIkgB,QAAQlrB,OAAS,EAAGsrB,KAAOL,KAAMjgB,EAAI,EAAGA,IAAK,CACtDsgB,KAAOA,KAAKrR,IAAIiR,QAAQlgB,IACxBqgB,KAAOA,KAAKpR,IAAIqR,KAC5B,CACQ/U,IAAMA,IAAI0D,IAAIoR,MACd,GAAIvrB,IAAM,EACN,IAAK,IAAIkL,EAAI,EAAGA,EAAI0d,WAAY1d,IAC5BuL,IAAMA,IAAIgT,QAC1B,CACI,OAAOhT,GACX,CAgFO,SAASgV,cAAcC,OAC1BtG,cAAcsG,MAAM/J,IACpBG,eAAe4J,MAAO,CAClBpiB,EAAG,SACH6L,EAAG,SACHwW,GAAI,QACJC,GAAI,SACL,CACCrF,WAAY,gBACZE,YAAa,kBAGjB,OAAOhiB,OAAOqiB,OAAO,IACdR,QAAQoF,MAAMpiB,EAAGoiB,MAAMnF,eACvBmF,SACA,CAAE7F,EAAG6F,MAAM/J,GAAG2D,QAEzB;sECrWA,MAAM9H,MAAMxO,OAAO,GAAIyO,MAAMzO,OAAO,GAAI0O,MAAM1O,OAAO,GAAI8T,MAAM9T,OAAO,GAEtE,MAAM6c,eAAiB,CAAEC,OAAQ,MACjC,SAASC,eAAaL,OAClB,MAAMhG,KAAO+F,cAAcC,OAC3BM,eAAkBN,MAAO,CACrB7J,KAAM,WACN/Z,EAAG,SACHrF,EAAG,SACH2U,YAAa,YACd,CACC6U,kBAAmB,WACnBC,OAAQ,WACRC,QAAS,WACTC,WAAY,aAGhB,OAAO3nB,OAAOqiB,OAAO,IAAKpB,MAC9B,CAQO,SAAS2G,eAAeC,UAC3B,MAAMC,MAAQR,eAAaO,UAC3B,MAAM3K,GAAEA,GAAIrY,EAAGkjB,YAAaC,QAASA,QAAS5K,KAAM6K,MAAKtV,YAAEA,YAAWqP,YAAEA,YAAatR,EAAGwX,UAAcJ,MAKtG,MAAMhH,KAAO7H,OAAQ1O,OAAOyX,YAAc,GAAKhJ,MAC/C,MAAMmP,KAAOjL,GAAGvM,OAChB,MAAMyX,GAAKlG,MAAM4F,MAAMjjB,EAAGijB,MAAMhG,YAEhC,MAAM4F,QAAUI,MAAMJ,SAC1B,EAAU7I,EAAG3C,KACD,IACI,MAAO,CAAEiB,QAAS,KAAM5e,MAAO2e,GAAG4F,KAAKjE,EAAI3B,GAAGyE,IAAIzF,IAClE,CACY,MAAOxe,GACH,MAAO,CAAEyf,QAAS,MAAO5e,MAAOwa,MAChD,CACS,GACL,MAAMyO,kBAAoBM,MAAMN,mBAAsB,CAAC7e,OAAUA,OACjE,MAAM8e,OAASK,MAAML,QACzB,EAAUxkB,KAAMolB,IAAKC,UACTnP,MAAM,SAAUmP,QAChB,GAAID,IAAI5sB,QAAU6sB,OACd,MAAM,IAAIzsB,MAAM,uCACpB,OAAOoH,IACV,GAGL,SAASslB,YAAYnP,MAAOvU,GACxB2jB,SAAY,cAAgBpP,MAAOvU,EAAGkU,MAAK+H,KACnD,CACI,SAAS2H,YAAYC,OACjB,KAAMA,iBAAiBC,OACnB,MAAM,IAAI9sB,MAAM,yBAC5B,CAGI,MAAM+sB,aAAe9K,UAAS,CAACsD,EAAGyH,MAC9B,MAAQC,GAAIxlB,EAAGylB,GAAIxlB,EAAGylB,GAAIC,GAAM7H,EAChC,MAAMK,IAAML,EAAEK,MACd,GAAIoH,IAAM,KACNA,GAAKpH,IAAMpD,MAAMnB,GAAGyE,IAAIsH,GAC5B,MAAMC,GAAKf,KAAK7kB,EAAIulB,IACpB,MAAMM,GAAKhB,KAAK5kB,EAAIslB,IACpB,MAAMO,GAAKjB,KAAKc,EAAIJ,IACpB,GAAIpH,IACA,MAAO,CAAEne,EAAGyV,MAAKxV,EAAGyV,OACxB,GAAIoQ,KAAOpQ,MACP,MAAM,IAAInd,MAAM,oBACpB,MAAO,CAAEyH,EAAG4lB,GAAI3lB,EAAG4lB,GAAI,IAE3B,MAAME,gBAAkBvL,UAAUsD,IAC9B,MAAM/d,EAAEA,EAACrF,EAAEA,GAAM8pB,MACjB,GAAI1G,EAAEK,MACF,MAAM,IAAI5lB,MAAM,mBAGpB,MAAQitB,GAAIQ,EAAGP,GAAIQ,EAAGP,GAAI1J,EAAGkK,GAAIC,GAAMrI,EACvC,MAAMsI,GAAKvB,KAAKmB,EAAIA,GACpB,MAAMK,GAAKxB,KAAKoB,EAAIA,GACpB,MAAMK,GAAKzB,KAAK7I,EAAIA,GACpB,MAAMuK,GAAK1B,KAAKyB,GAAKA,IACrB,MAAME,IAAM3B,KAAKuB,GAAKrmB,GACtB,MAAM0mB,KAAO5B,KAAKyB,GAAKzB,KAAK2B,IAAMH,KAClC,MAAMK,MAAQ7B,KAAK0B,GAAK1B,KAAKnqB,EAAImqB,KAAKuB,GAAKC,MAC3C,GAAII,OAASC,MACT,MAAM,IAAInuB,MAAM,yCAEpB,MAAMouB,GAAK9B,KAAKmB,EAAIC,GACpB,MAAMW,GAAK/B,KAAK7I,EAAImK,GACpB,GAAIQ,KAAOC,GACP,MAAM,IAAIruB,MAAM,yCACpB,OAAO,IAAI,IAIf,MAAM8sB,MACFra,YAAYwa,GAAIC,GAAIC,GAAIQ,IACpBjpB,KAAKuoB,GAAKA,GACVvoB,KAAKwoB,GAAKA,GACVxoB,KAAKyoB,GAAKA,GACVzoB,KAAKipB,GAAKA,GACVjB,YAAY,IAAKO,IACjBP,YAAY,IAAKQ,IACjBR,YAAY,IAAKS,IACjBT,YAAY,IAAKiB,IACjBxpB,OAAOqiB,OAAO9hB,KAC1B,CACY+C,QACA,OAAO/C,KAAK4pB,WAAW7mB,CACnC,CACYC,QACA,OAAOhD,KAAK4pB,WAAW5mB,CACnC,CACQ6mB,kBAAkBhJ,GACd,GAAIA,aAAauH,MACb,MAAM,IAAI9sB,MAAM,8BACpB,MAAMyH,EAAEA,EAACC,EAAEA,GAAM6d,GAAK,CAAE,EACxBmH,YAAY,IAAKjlB,GACjBilB,YAAY,IAAKhlB,GACjB,OAAO,IAAIolB,MAAMrlB,EAAGC,EAAGyV,MAAKmP,KAAK7kB,EAAIC,GACjD,CACQ6mB,kBAAkB/F,QACd,MAAMgG,MAAQnN,GAAG6F,YAAYsB,OAAOxN,KAAKuK,GAAMA,EAAE4H,MACjD,OAAO3E,OAAOxN,KAAI,CAACuK,EAAG7lB,IAAM6lB,EAAE+I,SAASE,MAAM9uB,MAAKsb,IAAI8R,MAAM2B,WACxE,CAEQF,WAAW/F,OAAQG,SACf,OAAOgC,UAAUmC,MAAOP,GAAI/D,OAAQG,QAChD,CAEQ+F,eAAepG,YACXqG,KAAKlE,cAAc/lB,KAAM4jB,WACrC,CAGQsG,iBACIpB,gBAAgB9oB,KAC5B,CAEQ4E,OAAOujB,OACHD,YAAYC,OACZ,MAAQI,GAAI4B,GAAI3B,GAAI4B,GAAI3B,GAAI4B,IAAOrqB,KACnC,MAAQuoB,GAAIY,GAAIX,GAAIY,GAAIX,GAAIY,IAAOlB,MACnC,MAAMmC,KAAO1C,KAAKuC,GAAKd,IACvB,MAAMkB,KAAO3C,KAAKuB,GAAKkB,IACvB,MAAMG,KAAO5C,KAAKwC,GAAKf,IACvB,MAAMoB,KAAO7C,KAAKwB,GAAKiB,IACvB,OAAOC,OAASC,MAAQC,OAASC,IAC7C,CACQvJ,MACI,OAAOlhB,KAAK4E,OAAOwjB,MAAM1I,KACrC,CACQ4D,SAEI,OAAO,IAAI8E,MAAMR,MAAM5nB,KAAKuoB,IAAKvoB,KAAKwoB,GAAIxoB,KAAKyoB,GAAIb,MAAM5nB,KAAKipB,IAC1E,CAIQxE,SACI,MAAM3hB,EAAEA,GAAMykB,MACd,MAAQgB,GAAI4B,GAAI3B,GAAI4B,GAAI3B,GAAI4B,IAAOrqB,KACnC,MAAMwZ,EAAIoO,KAAKuC,GAAKA,IACpB,MAAMO,EAAI9C,KAAKwC,GAAKA,IACpB,MAAMO,EAAI/C,KAAKlP,MAAMkP,KAAKyC,GAAKA,KAC/B,MAAMO,EAAIhD,KAAK9kB,EAAI0W,GACnB,MAAMqR,KAAOV,GAAKC,GAClB,MAAM1c,EAAIka,KAAKA,KAAKiD,KAAOA,MAAQrR,EAAIkR,GACvC,MAAMI,EAAIF,EAAIF,EACd,MAAMjR,EAAIqR,EAAIH,EACd,MAAMI,EAAIH,EAAIF,EACd,MAAMM,GAAKpD,KAAKla,EAAI+L,GACpB,MAAMwR,GAAKrD,KAAKkD,EAAIC,GACpB,MAAMG,GAAKtD,KAAKla,EAAIqd,GACpB,MAAMI,GAAKvD,KAAKnO,EAAIqR,GACpB,OAAO,IAAI1C,MAAM4C,GAAIC,GAAIE,GAAID,GACzC,CAIQ/V,IAAIgT,OACAD,YAAYC,OACZ,MAAMrlB,EAAEA,EAACrF,EAAEA,GAAM8pB,MACjB,MAAQgB,GAAI4B,GAAI3B,GAAI4B,GAAI3B,GAAI4B,GAAIpB,GAAImC,IAAOprB,KAC3C,MAAQuoB,GAAIY,GAAIX,GAAIY,GAAIX,GAAIY,GAAIJ,GAAIoC,IAAOlD,MAK3C,GAAIrlB,IAAMkH,QAAQ,GAAI,CAClB,MAAMwP,EAAIoO,MAAMwC,GAAKD,KAAOf,GAAKD,KACjC,MAAMuB,EAAI9C,MAAMwC,GAAKD,KAAOf,GAAKD,KACjC,MAAM1P,EAAImO,KAAK8C,EAAIlR,GACnB,GAAIC,IAAMjB,MACN,OAAOxY,KAAKykB,SAChB,MAAMkG,EAAI/C,KAAKyC,GAAK3R,MAAM2S,IAC1B,MAAMT,EAAIhD,KAAKwD,GAAK1S,MAAM2Q,IAC1B,MAAM3b,EAAIkd,EAAID,EACd,MAAMG,EAAIJ,EAAIlR,EACd,MAAMuR,EAAIH,EAAID,EACd,MAAMK,GAAKpD,KAAKla,EAAI+L,GACpB,MAAMwR,GAAKrD,KAAKkD,EAAIC,GACpB,MAAMG,GAAKtD,KAAKla,EAAIqd,GACpB,MAAMI,GAAKvD,KAAKnO,EAAIqR,GACpB,OAAO,IAAI1C,MAAM4C,GAAIC,GAAIE,GAAID,GAC7C,CACY,MAAM1R,EAAIoO,KAAKuC,GAAKhB,IACpB,MAAMuB,EAAI9C,KAAKwC,GAAKhB,IACpB,MAAMuB,EAAI/C,KAAKwD,GAAK3tB,EAAI4tB,IACxB,MAAMT,EAAIhD,KAAKyC,GAAKhB,IACpB,MAAM3b,EAAIka,MAAMuC,GAAKC,KAAOjB,GAAKC,IAAM5P,EAAIkR,GAC3C,MAAMjR,EAAImR,EAAID,EACd,MAAMG,EAAIF,EAAID,EACd,MAAMI,EAAInD,KAAK8C,EAAI5nB,EAAI0W,GACvB,MAAMwR,GAAKpD,KAAKla,EAAI+L,GACpB,MAAMwR,GAAKrD,KAAKkD,EAAIC,GACpB,MAAMG,GAAKtD,KAAKla,EAAIqd,GACpB,MAAMI,GAAKvD,KAAKnO,EAAIqR,GACpB,OAAO,IAAI1C,MAAM4C,GAAIC,GAAIE,GAAID,GACzC,CACQI,SAASnD,OACL,OAAOnoB,KAAKmV,IAAIgT,MAAM7E,SAClC,CACQe,KAAK/f,GACD,OAAO2lB,KAAKrE,WAAW5lB,KAAMsE,EAAG8jB,MAAMmD,WAClD,CAEQC,SAASlF,QACL,MAAMhiB,EAAIgiB,OACV2B,SAAY,SAAU3jB,EAAGmU,MAAK+O,aAC9B,MAAM3G,EAAEA,EAACnH,EAAEA,GAAM1Z,KAAKqkB,KAAK/f,GAC3B,OAAO8jB,MAAMmD,WAAW,CAAC1K,EAAGnH,IAAI,EAC5C,CAMQ+R,eAAenF,OAAQrF,IAAMmH,MAAM1I,MAC/B,MAAMpb,EAAIgiB,OACV2B,SAAY,SAAU3jB,EAAGkU,MAAKgP,aAC9B,GAAIljB,IAAMkU,MACN,OAAOkT,EACX,GAAI1rB,KAAKkhB,OAAS5c,IAAMmU,MACpB,OAAOzY,KACX,OAAOiqB,KAAKpE,iBAAiB7lB,KAAMsE,EAAG8jB,MAAMmD,WAAYtK,IACpE,CAKQ0K,eACI,OAAO3rB,KAAKyrB,eAAe9D,UAAUzG,KACjD,CAGQ0K,gBACI,OAAO3B,KAAKzF,aAAaxkB,KAAMwnB,aAAatG,KACxD,CAGQ0I,SAAStB,IACL,OAAOD,aAAaroB,KAAMsoB,GACtC,CACQuD,gBACI,MAAQ1b,EAAGwX,UAAaJ,MACxB,GAAII,WAAalP,MACb,OAAOzY,KACX,OAAOA,KAAKyrB,eAAe9D,SACvC,CAGQkC,eAAe3Q,IAAK4N,OAAS,OACzB,MAAMrpB,EAAEA,EAACqF,EAAEA,GAAMykB,MACjB,MAAMtsB,IAAM0hB,GAAG6D,MACftH,IAAMwB,YAAY,WAAYxB,IAAKje,KACnC2d,MAAM,SAAUkO,QAChB,MAAMgF,OAAS5S,IAAIjX,QACnB,MAAM8pB,SAAW7S,IAAIje,IAAM,GAC3B6wB,OAAO7wB,IAAM,GAAK8wB,UAAY,IAC9B,MAAM/oB,EAAIgpB,gBAAmBF,QAK7B,MAAM/mB,IAAM+hB,OAASvG,KAAO5D,GAAG2D,MAC/B2H,SAAY,aAAcjlB,EAAGwV,MAAKzT,KAGlC,MAAMknB,GAAKrE,KAAK5kB,EAAIA,GACpB,MAAMsb,EAAIsJ,KAAKqE,GAAKxT,OACpB,MAAMkD,EAAIiM,KAAKnqB,EAAIwuB,GAAKnpB,GACxB,IAAI8Z,QAAEA,QAAS5e,MAAO+E,GAAMokB,QAAQ7I,EAAG3C,GACvC,IAAKiB,QACD,MAAM,IAAIthB,MAAM,uCACpB,MAAM4wB,QAAUnpB,EAAI0V,SAASA,MAC7B,MAAM0T,eAAiBJ,SAAW,OAAU,EAC5C,IAAKjF,QAAU/jB,IAAMyV,OAAO2T,cAExB,MAAM,IAAI7wB,MAAM,gCACpB,GAAI6wB,gBAAkBD,OAClBnpB,EAAI6kB,MAAM7kB,GACd,OAAOqlB,MAAM2B,WAAW,CAAEhnB,IAAGC,KACzC,CACQ6mB,sBAAsBuC,SAClB,OAAOC,qBAAqBD,SAASE,KACjD,CACQC,aACI,MAAMxpB,EAAEA,EAACC,EAAEA,GAAMhD,KAAK4pB,WACtB,MAAMxhB,MAAQokB,gBAAmBxpB,EAAG2Z,GAAG6D,OACvCpY,MAAMA,MAAMlN,OAAS,IAAM6H,EAAI0V,MAAM,IAAO,EAC5C,OAAOrQ,KACnB,CACQqkB,QACI,OAAOC,WAAc1sB,KAAKusB,aACtC,EAEInE,MAAMtD,KAAO,IAAIsD,MAAMb,MAAMZ,GAAIY,MAAMX,GAAInO,MAAKmP,KAAKL,MAAMZ,GAAKY,MAAMX,KACtEwB,MAAM1I,KAAO,IAAI0I,MAAM5P,MAAKC,MAAKA,MAAKD,OACtC,MAAQsM,KAAMgG,EAAGpL,KAAMgM,GAAMtD,MAC7B,MAAM6B,KAAO5F,KAAK+D,MAAO3G,YAAc,GACvC,SAASkL,KAAK7pB,GACV,OAAOib,IAAIjb,EAAG0kB,YACtB,CAEI,SAASoF,QAAQ/P,MACb,OAAO8P,KAAKX,gBAAmBnP,MACvC,CAEI,SAASwP,qBAAqBrJ,KAC1B,MAAM/nB,IAAM0hB,GAAG6D,MACfwC,IAAMtI,YAAY,cAAesI,IAAK/nB,KAGtC,MAAM4xB,OAASnS,YAAY,qBAAsBgN,MAAM1E,KAAM,EAAI/nB,KACjE,MAAM6xB,KAAO7F,kBAAkB4F,OAAO5qB,MAAM,EAAGhH,MAC/C,MAAM8xB,OAASF,OAAO5qB,MAAMhH,IAAK,EAAIA,KACrC,MAAMqrB,OAASsG,QAAQE,MACvB,MAAMR,MAAQxB,EAAEU,SAASlF,QACzB,MAAM0G,WAAaV,MAAMC,aACzB,MAAO,CAAEO,UAAMC,cAAQzG,cAAQgG,YAAOU,sBAC9C,CAEI,SAASC,aAAab,SAClB,OAAOC,qBAAqBD,SAASY,UAC7C,CAEI,SAASE,mBAAmBC,QAAU,IAAItyB,cAAiBuyB,MACvD,MAAM5e,IAAM6e,eAAkBD,MAC9B,OAAOR,QAAQlF,MAAMR,OAAO1Y,IAAKkM,YAAY,UAAWyS,WAAY1F,UAC5E,CAEI,SAAS6F,KAAK9e,IAAK4d,QAASmB,QAAU,CAAA,GAClC/e,IAAMkM,YAAY,UAAWlM,KAC7B,GAAIiZ,QACAjZ,IAAMiZ,QAAQjZ,KAClB,MAAMue,OAAEA,OAAMzG,OAAEA,OAAM0G,WAAEA,YAAeX,qBAAqBD,SAC5D,MAAM5N,EAAI0O,mBAAmBK,QAAQJ,QAASJ,OAAQve,KACtD,MAAMgf,EAAI1C,EAAEU,SAAShN,GAAG+N,aACxB,MAAM3Q,EAAIsR,mBAAmBK,QAAQJ,QAASK,EAAGR,WAAYxe,KAC7D,MAAM9Q,EAAIivB,KAAKnO,EAAI5C,EAAI0K,QACvB2B,SAAY,cAAevqB,EAAG8a,MAAKgP,aACnC,MAAMngB,IAAMgmB,YAAeG,EAAGhB,gBAAmB9uB,EAAGif,GAAG6D,QACvD,OAAO9F,YAAY,SAAUrT,IAAKsV,GAAG6D,MAAQ,EACrD,CACI,MAAMiN,WAAa5G,eAKnB,SAAS6G,OAAOC,IAAKnf,IAAKof,UAAWL,QAAUE,YAC3C,MAAMN,QAAEA,QAAOrG,OAAEA,QAAWyG,QAC5B,MAAMtyB,IAAM0hB,GAAG6D,MACfmN,IAAMjT,YAAY,YAAaiT,IAAK,EAAI1yB,KACxCuT,IAAMkM,YAAY,UAAWlM,KAC7Bof,UAAYlT,YAAY,YAAakT,UAAW3yB,KAChD,GAAI6rB,SAAW7mB,UACX2Y,MAAM,SAAUkO,QACpB,GAAIW,QACAjZ,IAAMiZ,QAAQjZ,KAClB,MAAM9Q,EAAIsuB,gBAAmB2B,IAAI1rB,MAAMhH,IAAK,EAAIA,MAChD,IAAIue,EAAGgU,EAAGK,GACV,IAIIrU,EAAI4O,MAAM0F,QAAQF,UAAW9G,QAC7B0G,EAAIpF,MAAM0F,QAAQH,IAAI1rB,MAAM,EAAGhH,KAAM6rB,QACrC+G,GAAK/C,EAAEW,eAAe/tB,EAClC,CACQ,MAAO4B,OACH,OAAO,KACnB,CACQ,IAAKwnB,QAAUtN,EAAEmS,eACb,OAAO,MACX,MAAM/P,EAAIsR,mBAAmBC,QAASK,EAAEjB,aAAc/S,EAAE+S,aAAc/d,KACtE,MAAMuf,IAAMP,EAAErY,IAAIqE,EAAEiS,eAAe7P,IAGnC,OAAOmS,IAAIzC,SAASuC,IAAIhC,gBAAgBjnB,OAAOwjB,MAAM1I,KAC7D,CACIoL,EAAEd,eAAe,GACjB,MAAMgE,MAAQ,CACV3B,0CAEA4B,iBAAkB,IAAM7b,YAAYuK,GAAG6D,OAOvC0N,WAAWtK,WAAa,EAAG0I,MAAQlE,MAAMtD,MACrCwH,MAAMtC,eAAepG,YACrB0I,MAAMd,SAASxhB,OAAO,IACtB,OAAOsiB,KACV,GAEL,MAAO,CACH/E,YACA0F,0BACAK,UACAI,cACAS,cAAe/F,MACf4F,YAER;sEC7aA,MAAMI,UAAYpkB,OAAO,iFAEzB,MAAMqkB,gBAAkCrkB,OAAO,iFAEnCA,OAAO,SAAIyO,MAAMzO,OAAO,GAAI0O,MAAM1O,OAAO,GAAUA,OAAO,GAEtE,MAAM6T,IAAM7T,OAAO,GAAI8T,IAAM9T,OAAO,GACpC,SAASskB,oBAAoBvrB,GAEzB,MAAMwrB,KAAOvkB,OAAO,IAAKwkB,KAAOxkB,OAAO,IAAKykB,KAAOzkB,OAAO,IAAK0kB,KAAO1kB,OAAO,IAC7E,MAAM2U,EAAIyP,UACV,MAAMO,GAAM5rB,EAAIA,EAAK4b,EACrB,MAAMiQ,GAAMD,GAAK5rB,EAAK4b,EACtB,MAAMkQ,GAAM1Q,KAAKyQ,GAAIlW,MAAKiG,GAAKiQ,GAAMjQ,EACrC,MAAMmQ,GAAM3Q,KAAK0Q,GAAIpW,MAAKkG,GAAK5b,EAAK4b,EACpC,MAAMoQ,IAAO5Q,KAAK2Q,GAAIjR,IAAKc,GAAKmQ,GAAMnQ,EACtC,MAAMqQ,IAAO7Q,KAAK4Q,IAAKR,KAAM5P,GAAKoQ,IAAOpQ,EACzC,MAAMsQ,IAAO9Q,KAAK6Q,IAAKR,KAAM7P,GAAKqQ,IAAOrQ,EACzC,MAAMuQ,IAAO/Q,KAAK8Q,IAAKR,KAAM9P,GAAKsQ,IAAOtQ,EACzC,MAAMwQ,KAAQhR,KAAK+Q,IAAKR,KAAM/P,GAAKuQ,IAAOvQ,EAC1C,MAAMyQ,KAAQjR,KAAKgR,KAAMT,KAAM/P,GAAKuQ,IAAOvQ,EAC3C,MAAM0Q,KAAQlR,KAAKiR,KAAMb,KAAM5P,GAAKoQ,IAAOpQ,EAC3C,MAAM2Q,UAAanR,KAAKkR,KAAM3W,MAAKiG,GAAK5b,EAAK4b,EAE7C,MAAO,CAAE2Q,oBAAWV,MACxB,CACA,SAAS3H,kBAAkB7e,OAGvBA,MAAM,IAAM,IAEZA,MAAM,KAAO,IAEbA,MAAM,KAAO,GACb,OAAOA,KACX,CAEA,SAAS+e,QAAQ7I,EAAG3C,GAChB,MAAMgD,EAAIyP,UACV,MAAMmB,GAAKxR,IAAIpC,EAAIA,EAAIA,EAAGgD,GAC1B,MAAM6Q,GAAKzR,IAAIwR,GAAKA,GAAK5T,EAAGgD,GAE5B,MAAM7gB,IAAMwwB,oBAAoBhQ,EAAIkR,IAAIF,UACxC,IAAIvsB,EAAIgb,IAAIO,EAAIiR,GAAKzxB,IAAK6gB,GAC1B,MAAM8Q,IAAM1R,IAAIpC,EAAI5Y,EAAIA,EAAG4b,GAC3B,MAAM+Q,MAAQ3sB,EACd,MAAM4sB,MAAQ5R,IAAIhb,EAAIsrB,gBAAiB1P,GACvC,MAAMiR,SAAWH,MAAQnR,EACzB,MAAMuR,SAAWJ,MAAQ1R,KAAKO,EAAGK,GACjC,MAAMmR,OAASL,MAAQ1R,KAAKO,EAAI+P,gBAAiB1P,GACjD,GAAIiR,SACA7sB,EAAI2sB,MACR,GAAIG,UAAYC,OACZ/sB,EAAI4sB,MACR,GAAIzP,aAAand,EAAG4b,GAChB5b,EAAIgb,KAAKhb,EAAG4b,GAChB,MAAO,CAAE/B,QAASgT,UAAYC,SAAU7xB,MAAO+E,EACnD,CAYA,MAAM4Z,GAAqB,KAAOgF,MAAMyM,UAAWnuB,UAAW,MAAnC,GAC3B,MAAM8vB,gBAAkC,MAAQ,CAE5CjtB,EAAGkH,QAAQ,GAGXvM,EAAGuM,OAAO,iFAEV2S,MAGArY,EAAG0F,OAAO,gFAEVmG,EAAG2N,IAEH6I,GAAI3c,OAAO,iFACX4c,GAAI5c,OAAO,iFACX6S,KAAMtE,OACNnG,wBACA6U,oCAIAE,kBAtBoC,GA2BjC,MAAM6I,QAA0B,KAAO3I,eAAe0I,iBAAtB,GC9FhC,MAAME,mBAAqBD,QAAQhC,MAAMC,iBACzC,MAAMiC,gBAAkBA,KAC7B,MAAMC,cAAgBH,QAAQhC,MAAMC,mBACpC,MAAML,UAAYX,aAAakD,eAC/B,MAAMC,UAAY,IAAIv1B,WAAW,IACjCu1B,UAAU7sB,IAAI4sB,eACdC,UAAU7sB,IAAIqqB,UAAW,IACzB,MAAO,CACLA,oBACAwC,oBACD,EAEI,MAAMnD,aAAe+C,QAAQ/C,aAC7B,SAASoD,UAAUzC,WACxB,IACEoC,QAAQ7B,cAAcL,QAAQF,WAC9B,OAAO,IACT,CAAE,MACA,OAAO,KACT,CACF,CACO,MAAMN,KAAOA,CAClBjf,QACA+hB,YACGJ,QAAQ1C,KAAKjf,QAAS+hB,UAAUnuB,MAAM,EAAG,KACvC,MAAMyrB,OAASsC,QAAQtC,OCxCvB,MAAM4C,SAAYz0B,MACvB,GAAIiD,cAAMA,OAACiB,SAASlE,KAAM,CACxB,OAAOA,GACT,MAAO,GAAIA,eAAehB,WAAY,CACpC,OAAOiE,cAAMA,OAAC4B,KAAK7E,IAAIiB,OAAQjB,IAAIqE,WAAYrE,IAAItB,WACrD,KAAO,CACL,OAAOuE,cAAMA,OAAC4B,KAAK7E,IACrB,uUCTF,SAAW00B,OAAQ1xB,SAIjB,SAAS2xB,OAAQhrB,IAAKgJ,KACpB,IAAKhJ,IAAK,MAAM,IAAIlK,MAAMkT,KAAO,oBAKnC,SAASiiB,SAAUC,KAAMC,WACvBD,KAAKE,OAASD,UACd,IAAIE,SAAW,WAAc,EAC7BA,SAASlxB,UAAYgxB,UAAUhxB,UAC/B+wB,KAAK/wB,UAAY,IAAIkxB,SACrBH,KAAK/wB,UAAUoO,YAAc2iB,KAK/B,SAASI,GAAIzS,OAAQsG,KAAMoM,QACzB,GAAID,GAAGE,KAAK3S,QAAS,CACnB,OAAOA,OAGTre,KAAKixB,SAAW,EAChBjxB,KAAKkxB,MAAQ,KACblxB,KAAK9E,OAAS,EAGd8E,KAAKmxB,IAAM,KAEX,GAAI9S,SAAW,KAAM,CACnB,GAAIsG,OAAS,MAAQA,OAAS,KAAM,CAClCoM,OAASpM,KACTA,KAAO,GAGT3kB,KAAKoxB,MAAM/S,QAAU,EAAGsG,MAAQ,GAAIoM,QAAU,OAGlD,UAAWR,SAAW,SAAU,CAC9BA,OAAO1xB,QAAUiyB,EACrB,KAAS,CACLjyB,QAAQiyB,GAAKA,GAGfA,GAAGA,GAAKA,GACRA,GAAGO,SAAW,GAEd,IAAIvyB,OACJ,IACE,UAAW8lB,SAAW,oBAAsBA,OAAO9lB,SAAW,YAAa,CACzEA,OAAS8lB,OAAO9lB,MACtB,KAAW,CACLA,OAASL,aAAkBK,OAE9B,CAAC,MAAO3B,IAGT2zB,GAAGE,KAAO,SAASA,KAAMh1B,KACvB,GAAIA,eAAe80B,GAAI,CACrB,OAAO,KAGT,OAAO90B,MAAQ,aAAeA,MAAQ,UACpCA,IAAI+R,YAAYsjB,WAAaP,GAAGO,UAAYv2B,MAAM2H,QAAQzG,IAAIk1B,MACjE,EAEDJ,GAAG/rB,IAAM,SAASA,IAAKykB,KAAMC,OAC3B,GAAID,KAAK8H,IAAI7H,OAAS,EAAG,OAAOD,KAChC,OAAOC,KACR,EAEDqH,GAAG7tB,IAAM,SAASA,IAAKumB,KAAMC,OAC3B,GAAID,KAAK8H,IAAI7H,OAAS,EAAG,OAAOD,KAChC,OAAOC,KACR,EAEDqH,GAAGnxB,UAAUyxB,MAAQ,SAASG,KAAMlT,OAAQsG,KAAMoM,QAChD,UAAW1S,SAAW,SAAU,CAC9B,OAAOre,KAAKwxB,YAAYnT,OAAQsG,KAAMoM,QAGxC,UAAW1S,SAAW,SAAU,CAC9B,OAAOre,KAAKyxB,WAAWpT,OAAQsG,KAAMoM,QAGvC,GAAIpM,OAAS,MAAO,CAClBA,KAAO,GAET6L,OAAO7L,QAAUA,KAAO,IAAMA,MAAQ,GAAKA,MAAQ,IAEnDtG,OAASA,OAAO1b,WAAWqC,QAAQ,OAAQ,IAC3C,IAAI7I,MAAQ,EACZ,GAAIkiB,OAAO,KAAO,IAAK,CACrBliB,QACA6D,KAAKixB,SAAW,EAGlB,GAAI90B,MAAQkiB,OAAOnjB,OAAQ,CACzB,GAAIypB,OAAS,GAAI,CACf3kB,KAAK0xB,UAAUrT,OAAQliB,MAAO40B,OACtC,KAAa,CACL/wB,KAAK2xB,WAAWtT,OAAQsG,KAAMxoB,OAC9B,GAAI40B,SAAW,KAAM,CACnB/wB,KAAKyxB,WAAWzxB,KAAK4xB,UAAWjN,KAAMoM,UAI7C,EAEDD,GAAGnxB,UAAU6xB,YAAc,SAASA,YAAanT,OAAQsG,KAAMoM,QAC7D,GAAI1S,OAAS,EAAG,CACdre,KAAKixB,SAAW,EAChB5S,QAAUA,OAEZ,GAAIA,OAAS,SAAW,CACtBre,KAAKkxB,MAAQ,CAAC7S,OAAS,UACvBre,KAAK9E,OAAS,CACpB,MAAW,GAAImjB,OAAS,iBAAkB,CACpCre,KAAKkxB,MAAQ,CACX7S,OAAS,SACRA,OAAS,SAAa,UAEzBre,KAAK9E,OAAS,CACpB,KAAW,CACLs1B,OAAOnS,OAAS,kBAChBre,KAAKkxB,MAAQ,CACX7S,OAAS,SACRA,OAAS,SAAa,SACvB,GAEFre,KAAK9E,OAAS,EAGhB,GAAI61B,SAAW,KAAM,OAGrB/wB,KAAKyxB,WAAWzxB,KAAK4xB,UAAWjN,KAAMoM,OACvC,EAEDD,GAAGnxB,UAAU8xB,WAAa,SAASA,WAAYpT,OAAQsG,KAAMoM,QAE3DP,cAAcnS,OAAOnjB,SAAW,UAChC,GAAImjB,OAAOnjB,QAAU,EAAG,CACtB8E,KAAKkxB,MAAQ,CAAC,GACdlxB,KAAK9E,OAAS,EACd,OAAO8E,KAGTA,KAAK9E,OAAS2C,KAAK6jB,KAAKrD,OAAOnjB,OAAS,GACxC8E,KAAKkxB,MAAQ,IAAIp2B,MAAMkF,KAAK9E,QAC5B,IAAK,IAAIF,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CACpCgF,KAAKkxB,MAAMl2B,GAAK,EAGlB,IAAIkL,EAAG2rB,EACP,IAAIC,IAAM,EACV,GAAIf,SAAW,KAAM,CACnB,IAAK/1B,EAAIqjB,OAAOnjB,OAAS,EAAGgL,EAAI,EAAGlL,GAAK,EAAGA,GAAK,EAAG,CACjD62B,EAAIxT,OAAOrjB,GAAMqjB,OAAOrjB,EAAI,IAAM,EAAMqjB,OAAOrjB,EAAI,IAAM,GACzDgF,KAAKkxB,MAAMhrB,IAAO2rB,GAAKC,IAAO,SAC9B9xB,KAAKkxB,MAAMhrB,EAAI,GAAM2rB,IAAO,GAAKC,IAAQ,SACzCA,KAAO,GACP,GAAIA,KAAO,GAAI,CACbA,KAAO,GACP5rB,KAGV,MAAW,GAAI6qB,SAAW,KAAM,CAC1B,IAAK/1B,EAAI,EAAGkL,EAAI,EAAGlL,EAAIqjB,OAAOnjB,OAAQF,GAAK,EAAG,CAC5C62B,EAAIxT,OAAOrjB,GAAMqjB,OAAOrjB,EAAI,IAAM,EAAMqjB,OAAOrjB,EAAI,IAAM,GACzDgF,KAAKkxB,MAAMhrB,IAAO2rB,GAAKC,IAAO,SAC9B9xB,KAAKkxB,MAAMhrB,EAAI,GAAM2rB,IAAO,GAAKC,IAAQ,SACzCA,KAAO,GACP,GAAIA,KAAO,GAAI,CACbA,KAAO,GACP5rB,MAIN,OAAOlG,KAAK+xB,QACb,EAED,SAASC,cAAelwB,OAAQmwB,OAC9B,IAAIh0B,EAAI6D,OAAO3G,WAAW82B,OAE1B,GAAIh0B,GAAK,IAAMA,GAAK,GAAI,CACtB,OAAOA,EAAI,EAEZ,MAAM,GAAIA,GAAK,IAAMA,GAAK,GAAI,CAC7B,OAAOA,EAAI,EAEZ,MAAM,GAAIA,GAAK,IAAMA,GAAK,IAAK,CAC9B,OAAOA,EAAI,EACjB,KAAW,CACLuyB,OAAO,MAAO,wBAA0B1uB,SAI5C,SAASowB,aAAcpwB,OAAQqwB,WAAYF,OACzC,IAAIzT,EAAIwT,cAAclwB,OAAQmwB,OAC9B,GAAIA,MAAQ,GAAKE,WAAY,CAC3B3T,GAAKwT,cAAclwB,OAAQmwB,MAAQ,IAAM,EAE3C,OAAOzT,EAGTsS,GAAGnxB,UAAU+xB,UAAY,SAASA,UAAWrT,OAAQliB,MAAO40B,QAE1D/wB,KAAK9E,OAAS2C,KAAK6jB,MAAMrD,OAAOnjB,OAASiB,OAAS,GAClD6D,KAAKkxB,MAAQ,IAAIp2B,MAAMkF,KAAK9E,QAC5B,IAAK,IAAIF,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CACpCgF,KAAKkxB,MAAMl2B,GAAK,EAIlB,IAAI82B,IAAM,EACV,IAAI5rB,EAAI,EAER,IAAI2rB,EACJ,GAAId,SAAW,KAAM,CACnB,IAAK/1B,EAAIqjB,OAAOnjB,OAAS,EAAGF,GAAKmB,MAAOnB,GAAK,EAAG,CAC9C62B,EAAIK,aAAa7T,OAAQliB,MAAOnB,IAAM82B,IACtC9xB,KAAKkxB,MAAMhrB,IAAM2rB,EAAI,SACrB,GAAIC,KAAO,GAAI,CACbA,KAAO,GACP5rB,GAAK,EACLlG,KAAKkxB,MAAMhrB,IAAM2rB,IAAM,EACjC,KAAe,CACLC,KAAO,GAGjB,KAAW,CACL,IAAIM,YAAc/T,OAAOnjB,OAASiB,MAClC,IAAKnB,EAAIo3B,YAAc,IAAM,EAAIj2B,MAAQ,EAAIA,MAAOnB,EAAIqjB,OAAOnjB,OAAQF,GAAK,EAAG,CAC7E62B,EAAIK,aAAa7T,OAAQliB,MAAOnB,IAAM82B,IACtC9xB,KAAKkxB,MAAMhrB,IAAM2rB,EAAI,SACrB,GAAIC,KAAO,GAAI,CACbA,KAAO,GACP5rB,GAAK,EACLlG,KAAKkxB,MAAMhrB,IAAM2rB,IAAM,EACjC,KAAe,CACLC,KAAO,IAKb9xB,KAAK+xB,QACN,EAED,SAASM,UAAWvtB,IAAK3I,MAAOC,IAAKwM,KACnC,IAAI4V,EAAI,EACR,IAAIpd,EAAI,EACR,IAAInG,IAAM4C,KAAKoF,IAAI6B,IAAI5J,OAAQkB,KAC/B,IAAK,IAAIpB,EAAImB,MAAOnB,EAAIC,IAAKD,IAAK,CAChC,IAAIiD,EAAI6G,IAAI3J,WAAWH,GAAK,GAE5BwjB,GAAK5V,IAGL,GAAI3K,GAAK,GAAI,CACXmD,EAAInD,EAAI,GAAK,EAGrB,MAAa,GAAIA,GAAK,GAAI,CAClBmD,EAAInD,EAAI,GAAK,EAGrB,KAAa,CACLmD,EAAInD,EAENuyB,OAAOvyB,GAAK,GAAKmD,EAAIwH,IAAK,qBAC1B4V,GAAKpd,EAEP,OAAOod,EAGTsS,GAAGnxB,UAAUgyB,WAAa,SAASA,WAAYtT,OAAQsG,KAAMxoB,OAE3D6D,KAAKkxB,MAAQ,CAAC,GACdlxB,KAAK9E,OAAS,EAGd,IAAK,IAAIo3B,QAAU,EAAGC,QAAU,EAAGA,SAAW,SAAWA,SAAW5N,KAAM,CACxE2N,UAEFA,UACAC,QAAWA,QAAU5N,KAAQ,EAE7B,IAAI6N,MAAQnU,OAAOnjB,OAASiB,MAC5B,IAAI4hB,IAAMyU,MAAQF,QAClB,IAAIl2B,IAAMyB,KAAKoF,IAAIuvB,MAAOA,MAAQzU,KAAO5hB,MAEzC,IAAI+U,KAAO,EACX,IAAK,IAAIlW,EAAImB,MAAOnB,EAAIoB,IAAKpB,GAAKs3B,QAAS,CACzCphB,KAAOmhB,UAAUhU,OAAQrjB,EAAGA,EAAIs3B,QAAS3N,MAEzC3kB,KAAKyyB,MAAMF,SACX,GAAIvyB,KAAKkxB,MAAM,GAAKhgB,KAAO,SAAW,CACpClR,KAAKkxB,MAAM,IAAMhgB,IACzB,KAAa,CACLlR,KAAK0yB,OAAOxhB,OAIhB,GAAI6M,MAAQ,EAAG,CACb,IAAIjgB,IAAM,EACVoT,KAAOmhB,UAAUhU,OAAQrjB,EAAGqjB,OAAOnjB,OAAQypB,MAE3C,IAAK3pB,EAAI,EAAGA,EAAI+iB,IAAK/iB,IAAK,CACxB8C,KAAO6mB,KAGT3kB,KAAKyyB,MAAM30B,KACX,GAAIkC,KAAKkxB,MAAM,GAAKhgB,KAAO,SAAW,CACpClR,KAAKkxB,MAAM,IAAMhgB,IACzB,KAAa,CACLlR,KAAK0yB,OAAOxhB,OAIhBlR,KAAK+xB,QACN,EAEDjB,GAAGnxB,UAAU0C,KAAO,SAASA,KAAMswB,MACjCA,KAAKzB,MAAQ,IAAIp2B,MAAMkF,KAAK9E,QAC5B,IAAK,IAAIF,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CACpC23B,KAAKzB,MAAMl2B,GAAKgF,KAAKkxB,MAAMl2B,GAE7B23B,KAAKz3B,OAAS8E,KAAK9E,OACnBy3B,KAAK1B,SAAWjxB,KAAKixB,SACrB0B,KAAKxB,IAAMnxB,KAAKmxB,GACjB,EAED,SAASyB,KAAMD,KAAMrjB,KACnBqjB,KAAKzB,MAAQ5hB,IAAI4hB,MACjByB,KAAKz3B,OAASoU,IAAIpU,OAClBy3B,KAAK1B,SAAW3hB,IAAI2hB,SACpB0B,KAAKxB,IAAM7hB,IAAI6hB,IAGjBL,GAAGnxB,UAAUkzB,MAAQ,SAASA,MAAOF,MACnCC,KAAKD,KAAM3yB,KACZ,EAED8wB,GAAGnxB,UAAUkS,MAAQ,SAASA,QAC5B,IAAI2M,EAAI,IAAIsS,GAAG,MACf9wB,KAAKqC,KAAKmc,GACV,OAAOA,CACR,EAEDsS,GAAGnxB,UAAUmzB,QAAU,SAASA,QAAStxB,MACvC,MAAOxB,KAAK9E,OAASsG,KAAM,CACzBxB,KAAKkxB,MAAMlxB,KAAK9E,UAAY,EAE9B,OAAO8E,IACR,EAGD8wB,GAAGnxB,UAAUoyB,OAAS,SAASgB,QAC7B,MAAO/yB,KAAK9E,OAAS,GAAK8E,KAAKkxB,MAAMlxB,KAAK9E,OAAS,KAAO,EAAG,CAC3D8E,KAAK9E,SAEP,OAAO8E,KAAKgzB,WACb,EAEDlC,GAAGnxB,UAAUqzB,UAAY,SAASA,YAEhC,GAAIhzB,KAAK9E,SAAW,GAAK8E,KAAKkxB,MAAM,KAAO,EAAG,CAC5ClxB,KAAKixB,SAAW,EAElB,OAAOjxB,IACR,EAID,UAAWpB,SAAW,oBAAsBA,OAAOq0B,MAAQ,WAAY,CACrE,IACEnC,GAAGnxB,UAAUf,OAAOq0B,IAAI,+BAAiCpuB,OAC1D,CAAC,MAAO1H,GACP2zB,GAAGnxB,UAAUkF,QAAUA,QAE7B,KAAS,CACLisB,GAAGnxB,UAAUkF,QAAUA,QAGzB,SAASA,UACP,OAAQ7E,KAAKmxB,IAAM,UAAY,SAAWnxB,KAAK2C,SAAS,IAAM,IAiChE,IAAIuwB,MAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGF,IAAIC,WAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGpB,IAAIC,WAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAG9DtC,GAAGnxB,UAAUgD,SAAW,SAASA,SAAUgiB,KAAM0O,SAC/C1O,KAAOA,MAAQ,GACf0O,QAAUA,QAAU,GAAK,EAEzB,IAAInrB,IACJ,GAAIyc,OAAS,IAAMA,OAAS,MAAO,CACjCzc,IAAM,GACN,IAAI4pB,IAAM,EACV,IAAIwB,MAAQ,EACZ,IAAK,IAAIt4B,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CACpC,IAAI62B,EAAI7xB,KAAKkxB,MAAMl2B,GACnB,IAAIkW,OAAU2gB,GAAKC,IAAOwB,OAAS,UAAU3wB,SAAS,IACtD2wB,MAASzB,IAAO,GAAKC,IAAQ,SAC7BA,KAAO,EACP,GAAIA,KAAO,GAAI,CACbA,KAAO,GACP92B,IAEF,GAAIs4B,QAAU,GAAKt4B,IAAMgF,KAAK9E,OAAS,EAAG,CACxCgN,IAAMgrB,MAAM,EAAIhiB,KAAKhW,QAAUgW,KAAOhJ,GAChD,KAAe,CACLA,IAAMgJ,KAAOhJ,KAGjB,GAAIorB,QAAU,EAAG,CACfprB,IAAMorB,MAAM3wB,SAAS,IAAMuF,IAE7B,MAAOA,IAAIhN,OAASm4B,UAAY,EAAG,CACjCnrB,IAAM,IAAMA,IAEd,GAAIlI,KAAKixB,WAAa,EAAG,CACvB/oB,IAAM,IAAMA,IAEd,OAAOA,IAGT,GAAIyc,QAAUA,KAAO,IAAMA,MAAQ,GAAKA,MAAQ,GAAI,CAElD,IAAI4O,UAAYJ,WAAWxO,MAE3B,IAAI6O,UAAYJ,WAAWzO,MAC3Bzc,IAAM,GACN,IAAIjK,EAAI+B,KAAK6R,QACb5T,EAAEgzB,SAAW,EACb,OAAQhzB,EAAEw1B,SAAU,CAClB,IAAIjV,EAAIvgB,EAAEy1B,MAAMF,WAAW7wB,SAASgiB,MACpC1mB,EAAIA,EAAE01B,MAAMH,WAEZ,IAAKv1B,EAAEw1B,SAAU,CACfvrB,IAAMgrB,MAAMK,UAAY/U,EAAEtjB,QAAUsjB,EAAItW,GAClD,KAAe,CACLA,IAAMsW,EAAItW,KAGd,GAAIlI,KAAKyzB,SAAU,CACjBvrB,IAAM,IAAMA,IAEd,MAAOA,IAAIhN,OAASm4B,UAAY,EAAG,CACjCnrB,IAAM,IAAMA,IAEd,GAAIlI,KAAKixB,WAAa,EAAG,CACvB/oB,IAAM,IAAMA,IAEd,OAAOA,IAGTsoB,OAAO,MAAO,kCACf,EAEDM,GAAGnxB,UAAUi0B,SAAW,SAASA,WAC/B,IAAI3rB,IAAMjI,KAAKkxB,MAAM,GACrB,GAAIlxB,KAAK9E,SAAW,EAAG,CACrB+M,KAAOjI,KAAKkxB,MAAM,GAAK,QAC7B,MAAW,GAAIlxB,KAAK9E,SAAW,GAAK8E,KAAKkxB,MAAM,KAAO,EAAM,CAEtDjpB,KAAO,iBAAoBjI,KAAKkxB,MAAM,GAAK,QACjD,MAAW,GAAIlxB,KAAK9E,OAAS,EAAG,CAC1Bs1B,OAAO,MAAO,8CAEhB,OAAQxwB,KAAKixB,WAAa,GAAMhpB,IAAMA,GACvC,EAED6oB,GAAGnxB,UAAUwH,OAAS,SAASA,SAC7B,OAAOnH,KAAK2C,SAAS,GAAI,EAC1B,EAED,GAAI7D,OAAQ,CACVgyB,GAAGnxB,UAAU2wB,SAAW,SAASA,SAAUS,OAAQ71B,QACjD,OAAO8E,KAAK6zB,YAAY/0B,OAAQiyB,OAAQ71B,OACzC,EAGH41B,GAAGnxB,UAAUiyB,QAAU,SAASA,QAASb,OAAQ71B,QAC/C,OAAO8E,KAAK6zB,YAAY/4B,MAAOi2B,OAAQ71B,OACxC,EAED,IAAI44B,SAAW,SAASA,SAAUC,UAAWvyB,MAC3C,GAAIuyB,UAAUtzB,YAAa,CACzB,OAAOszB,UAAUtzB,YAAYe,MAE/B,OAAO,IAAIuyB,UAAUvyB,KACtB,EAEDsvB,GAAGnxB,UAAUk0B,YAAc,SAASA,YAAaE,UAAWhD,OAAQ71B,QAClE8E,KAAK+xB,SAEL,IAAIx3B,WAAayF,KAAKzF,aACtB,IAAIy5B,UAAY94B,QAAU2C,KAAKkH,IAAI,EAAGxK,YACtCi2B,OAAOj2B,YAAcy5B,UAAW,yCAChCxD,OAAOwD,UAAY,EAAG,+BAEtB,IAAI3sB,IAAMysB,SAASC,UAAWC,WAC9B,IAAIC,QAAUlD,SAAW,KAAO,KAAO,KACvC/wB,KAAK,eAAiBi0B,SAAS5sB,IAAK9M,YACpC,OAAO8M,GACR,EAEDypB,GAAGnxB,UAAUu0B,eAAiB,SAASA,eAAgB7sB,IAAK9M,YAC1D,IAAI45B,SAAW,EACf,IAAIb,MAAQ,EAEZ,IAAK,IAAIt4B,EAAI,EAAGmW,MAAQ,EAAGnW,EAAIgF,KAAK9E,OAAQF,IAAK,CAC/C,IAAIkW,KAAQlR,KAAKkxB,MAAMl2B,IAAMmW,MAASmiB,MAEtCjsB,IAAI8sB,YAAcjjB,KAAO,IACzB,GAAIijB,SAAW9sB,IAAInM,OAAQ,CACzBmM,IAAI8sB,YAAejjB,MAAQ,EAAK,IAElC,GAAIijB,SAAW9sB,IAAInM,OAAQ,CACzBmM,IAAI8sB,YAAejjB,MAAQ,GAAM,IAGnC,GAAIC,QAAU,EAAG,CACf,GAAIgjB,SAAW9sB,IAAInM,OAAQ,CACzBmM,IAAI8sB,YAAejjB,MAAQ,GAAM,IAEnCoiB,MAAQ,EACRniB,MAAQ,CAChB,KAAa,CACLmiB,MAAQpiB,OAAS,GACjBC,OAAS,GAIb,GAAIgjB,SAAW9sB,IAAInM,OAAQ,CACzBmM,IAAI8sB,YAAcb,MAElB,MAAOa,SAAW9sB,IAAInM,OAAQ,CAC5BmM,IAAI8sB,YAAc,GAGvB,EAEDrD,GAAGnxB,UAAUy0B,eAAiB,SAASA,eAAgB/sB,IAAK9M,YAC1D,IAAI45B,SAAW9sB,IAAInM,OAAS,EAC5B,IAAIo4B,MAAQ,EAEZ,IAAK,IAAIt4B,EAAI,EAAGmW,MAAQ,EAAGnW,EAAIgF,KAAK9E,OAAQF,IAAK,CAC/C,IAAIkW,KAAQlR,KAAKkxB,MAAMl2B,IAAMmW,MAASmiB,MAEtCjsB,IAAI8sB,YAAcjjB,KAAO,IACzB,GAAIijB,UAAY,EAAG,CACjB9sB,IAAI8sB,YAAejjB,MAAQ,EAAK,IAElC,GAAIijB,UAAY,EAAG,CACjB9sB,IAAI8sB,YAAejjB,MAAQ,GAAM,IAGnC,GAAIC,QAAU,EAAG,CACf,GAAIgjB,UAAY,EAAG,CACjB9sB,IAAI8sB,YAAejjB,MAAQ,GAAM,IAEnCoiB,MAAQ,EACRniB,MAAQ,CAChB,KAAa,CACLmiB,MAAQpiB,OAAS,GACjBC,OAAS,GAIb,GAAIgjB,UAAY,EAAG,CACjB9sB,IAAI8sB,YAAcb,MAElB,MAAOa,UAAY,EAAG,CACpB9sB,IAAI8sB,YAAc,GAGvB,EAED,GAAIt2B,KAAKw2B,MAAO,CACdvD,GAAGnxB,UAAU20B,WAAa,SAASA,WAAYzC,GAC7C,OAAO,GAAKh0B,KAAKw2B,MAAMxC,EACxB,CACL,KAAS,CACLf,GAAGnxB,UAAU20B,WAAa,SAASA,WAAYzC,GAC7C,IAAI0C,EAAI1C,EACR,IAAIrT,EAAI,EACR,GAAI+V,GAAK,KAAQ,CACf/V,GAAK,GACL+V,KAAO,GAET,GAAIA,GAAK,GAAM,CACb/V,GAAK,EACL+V,KAAO,EAET,GAAIA,GAAK,EAAK,CACZ/V,GAAK,EACL+V,KAAO,EAET,GAAIA,GAAK,EAAM,CACb/V,GAAK,EACL+V,KAAO,EAET,OAAO/V,EAAI+V,CACZ,EAGHzD,GAAGnxB,UAAU60B,UAAY,SAASA,UAAW3C,GAE3C,GAAIA,IAAM,EAAG,OAAO,GAEpB,IAAI0C,EAAI1C,EACR,IAAIrT,EAAI,EACR,IAAK+V,EAAI,QAAY,EAAG,CACtB/V,GAAK,GACL+V,KAAO,GAET,IAAKA,EAAI,OAAU,EAAG,CACpB/V,GAAK,EACL+V,KAAO,EAET,IAAKA,EAAI,MAAS,EAAG,CACnB/V,GAAK,EACL+V,KAAO,EAET,IAAKA,EAAI,KAAS,EAAG,CACnB/V,GAAK,EACL+V,KAAO,EAET,IAAKA,EAAI,KAAS,EAAG,CACnB/V,IAEF,OAAOA,CACR,EAGDsS,GAAGnxB,UAAUkjB,UAAY,SAASA,YAChC,IAAIgP,EAAI7xB,KAAKkxB,MAAMlxB,KAAK9E,OAAS,GACjC,IAAI6O,GAAK/J,KAAKs0B,WAAWzC,GACzB,OAAQ7xB,KAAK9E,OAAS,GAAK,GAAK6O,EACjC,EAED,SAAS0qB,WAAYz4B,KACnB,IAAI61B,EAAI,IAAI/2B,MAAMkB,IAAI6mB,aAEtB,IAAK,IAAI6R,IAAM,EAAGA,IAAM7C,EAAE32B,OAAQw5B,MAAO,CACvC,IAAI5C,IAAO4C,IAAM,GAAM,EACvB,IAAIC,KAAOD,IAAM,GAEjB7C,EAAE6C,KAAQ14B,IAAIk1B,MAAMY,OAAS6C,KAAQ,EAGvC,OAAO9C,EAITf,GAAGnxB,UAAUi1B,SAAW,SAASA,WAC/B,GAAI50B,KAAKyzB,SAAU,OAAO,EAE1B,IAAIjV,EAAI,EACR,IAAK,IAAIxjB,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CACpC,IAAIoG,EAAIpB,KAAKw0B,UAAUx0B,KAAKkxB,MAAMl2B,IAClCwjB,GAAKpd,EACL,GAAIA,IAAM,GAAI,MAEhB,OAAOod,CACR,EAEDsS,GAAGnxB,UAAUpF,WAAa,SAASA,aACjC,OAAOsD,KAAK6jB,KAAK1hB,KAAK6iB,YAAc,EACrC,EAEDiO,GAAGnxB,UAAUk1B,OAAS,SAASA,OAAQC,OACrC,GAAI90B,KAAKixB,WAAa,EAAG,CACvB,OAAOjxB,KAAK7B,MAAM42B,MAAMD,OAAOE,MAAM,GAEvC,OAAOh1B,KAAK6R,OACb,EAEDif,GAAGnxB,UAAUs1B,SAAW,SAASA,SAAUH,OACzC,GAAI90B,KAAKk1B,MAAMJ,MAAQ,GAAI,CACzB,OAAO90B,KAAKm1B,KAAKL,OAAOE,MAAM,GAAGI,OAEnC,OAAOp1B,KAAK6R,OACb,EAEDif,GAAGnxB,UAAU01B,MAAQ,SAASA,QAC5B,OAAOr1B,KAAKixB,WAAa,CAC1B,EAGDH,GAAGnxB,UAAU4f,IAAM,SAASA,MAC1B,OAAOvf,KAAK6R,QAAQujB,MACrB,EAEDtE,GAAGnxB,UAAUy1B,KAAO,SAASA,OAC3B,IAAKp1B,KAAKyzB,SAAU,CAClBzzB,KAAKixB,UAAY,EAGnB,OAAOjxB,IACR,EAGD8wB,GAAGnxB,UAAU21B,KAAO,SAASA,KAAMt5B,KACjC,MAAOgE,KAAK9E,OAASc,IAAId,OAAQ,CAC/B8E,KAAKkxB,MAAMlxB,KAAK9E,UAAY,EAG9B,IAAK,IAAIF,EAAI,EAAGA,EAAIgB,IAAId,OAAQF,IAAK,CACnCgF,KAAKkxB,MAAMl2B,GAAKgF,KAAKkxB,MAAMl2B,GAAKgB,IAAIk1B,MAAMl2B,GAG5C,OAAOgF,KAAK+xB,QACb,EAEDjB,GAAGnxB,UAAU41B,IAAM,SAASA,IAAKv5B,KAC/Bw0B,QAAQxwB,KAAKixB,SAAWj1B,IAAIi1B,YAAc,GAC1C,OAAOjxB,KAAKs1B,KAAKt5B,IAClB,EAGD80B,GAAGnxB,UAAU61B,GAAK,SAASA,GAAIx5B,KAC7B,GAAIgE,KAAK9E,OAASc,IAAId,OAAQ,OAAO8E,KAAK6R,QAAQ0jB,IAAIv5B,KACtD,OAAOA,IAAI6V,QAAQ0jB,IAAIv1B,KACxB,EAED8wB,GAAGnxB,UAAU81B,IAAM,SAASA,IAAKz5B,KAC/B,GAAIgE,KAAK9E,OAASc,IAAId,OAAQ,OAAO8E,KAAK6R,QAAQyjB,KAAKt5B,KACvD,OAAOA,IAAI6V,QAAQyjB,KAAKt1B,KACzB,EAGD8wB,GAAGnxB,UAAU+1B,MAAQ,SAASA,MAAO15B,KAEnC,IAAIoF,EACJ,GAAIpB,KAAK9E,OAASc,IAAId,OAAQ,CAC5BkG,EAAIpF,GACV,KAAW,CACLoF,EAAIpB,KAGN,IAAK,IAAIhF,EAAI,EAAGA,EAAIoG,EAAElG,OAAQF,IAAK,CACjCgF,KAAKkxB,MAAMl2B,GAAKgF,KAAKkxB,MAAMl2B,GAAKgB,IAAIk1B,MAAMl2B,GAG5CgF,KAAK9E,OAASkG,EAAElG,OAEhB,OAAO8E,KAAK+xB,QACb,EAEDjB,GAAGnxB,UAAUg2B,KAAO,SAASA,KAAM35B,KACjCw0B,QAAQxwB,KAAKixB,SAAWj1B,IAAIi1B,YAAc,GAC1C,OAAOjxB,KAAK01B,MAAM15B,IACnB,EAGD80B,GAAGnxB,UAAUi2B,IAAM,SAASA,IAAK55B,KAC/B,GAAIgE,KAAK9E,OAASc,IAAId,OAAQ,OAAO8E,KAAK6R,QAAQ8jB,KAAK35B,KACvD,OAAOA,IAAI6V,QAAQ8jB,KAAK31B,KACzB,EAED8wB,GAAGnxB,UAAUk2B,KAAO,SAASA,KAAM75B,KACjC,GAAIgE,KAAK9E,OAASc,IAAId,OAAQ,OAAO8E,KAAK6R,QAAQ6jB,MAAM15B,KACxD,OAAOA,IAAI6V,QAAQ6jB,MAAM11B,KAC1B,EAGD8wB,GAAGnxB,UAAUm2B,MAAQ,SAASA,MAAO95B,KAEnC,IAAI8G,EACJ,IAAI1B,EACJ,GAAIpB,KAAK9E,OAASc,IAAId,OAAQ,CAC5B4H,EAAI9C,KACJoB,EAAIpF,GACV,KAAW,CACL8G,EAAI9G,IACJoF,EAAIpB,KAGN,IAAK,IAAIhF,EAAI,EAAGA,EAAIoG,EAAElG,OAAQF,IAAK,CACjCgF,KAAKkxB,MAAMl2B,GAAK8H,EAAEouB,MAAMl2B,GAAKoG,EAAE8vB,MAAMl2B,GAGvC,GAAIgF,OAAS8C,EAAG,CACd,KAAO9H,EAAI8H,EAAE5H,OAAQF,IAAK,CACxBgF,KAAKkxB,MAAMl2B,GAAK8H,EAAEouB,MAAMl2B,IAI5BgF,KAAK9E,OAAS4H,EAAE5H,OAEhB,OAAO8E,KAAK+xB,QACb,EAEDjB,GAAGnxB,UAAUo2B,KAAO,SAASA,KAAM/5B,KACjCw0B,QAAQxwB,KAAKixB,SAAWj1B,IAAIi1B,YAAc,GAC1C,OAAOjxB,KAAK81B,MAAM95B,IACnB,EAGD80B,GAAGnxB,UAAUq2B,IAAM,SAASA,IAAKh6B,KAC/B,GAAIgE,KAAK9E,OAASc,IAAId,OAAQ,OAAO8E,KAAK6R,QAAQkkB,KAAK/5B,KACvD,OAAOA,IAAI6V,QAAQkkB,KAAK/1B,KACzB,EAED8wB,GAAGnxB,UAAUs2B,KAAO,SAASA,KAAMj6B,KACjC,GAAIgE,KAAK9E,OAASc,IAAId,OAAQ,OAAO8E,KAAK6R,QAAQikB,MAAM95B,KACxD,OAAOA,IAAI6V,QAAQikB,MAAM91B,KAC1B,EAGD8wB,GAAGnxB,UAAUo1B,MAAQ,SAASA,MAAOD,OACnCtE,cAAcsE,QAAU,UAAYA,OAAS,GAE7C,IAAIoB,YAAcr4B,KAAK6jB,KAAKoT,MAAQ,IAAM,EAC1C,IAAIqB,SAAWrB,MAAQ,GAGvB90B,KAAK8yB,QAAQoD,aAEb,GAAIC,SAAW,EAAG,CAChBD,cAIF,IAAK,IAAIl7B,EAAI,EAAGA,EAAIk7B,YAAal7B,IAAK,CACpCgF,KAAKkxB,MAAMl2B,IAAMgF,KAAKkxB,MAAMl2B,GAAK,SAInC,GAAIm7B,SAAW,EAAG,CAChBn2B,KAAKkxB,MAAMl2B,IAAMgF,KAAKkxB,MAAMl2B,GAAM,UAAc,GAAKm7B,SAIvD,OAAOn2B,KAAK+xB,QACb,EAEDjB,GAAGnxB,UAAUw1B,KAAO,SAASA,KAAML,OACjC,OAAO90B,KAAK6R,QAAQkjB,MAAMD,MAC3B,EAGDhE,GAAGnxB,UAAUy2B,KAAO,SAASA,KAAM1B,IAAKlvB,KACtCgrB,cAAckE,MAAQ,UAAYA,KAAO,GAEzC,IAAI5C,IAAO4C,IAAM,GAAM,EACvB,IAAIC,KAAOD,IAAM,GAEjB10B,KAAK8yB,QAAQhB,IAAM,GAEnB,GAAItsB,IAAK,CACPxF,KAAKkxB,MAAMY,KAAO9xB,KAAKkxB,MAAMY,KAAQ,GAAK6C,IAChD,KAAW,CACL30B,KAAKkxB,MAAMY,KAAO9xB,KAAKkxB,MAAMY,OAAS,GAAK6C,MAG7C,OAAO30B,KAAK+xB,QACb,EAGDjB,GAAGnxB,UAAU02B,KAAO,SAASA,KAAMr6B,KACjC,IAAIwiB,EAGJ,GAAIxe,KAAKixB,WAAa,GAAKj1B,IAAIi1B,WAAa,EAAG,CAC7CjxB,KAAKixB,SAAW,EAChBzS,EAAIxe,KAAKs2B,KAAKt6B,KACdgE,KAAKixB,UAAY,EACjB,OAAOjxB,KAAKgzB,WAGlB,MAAW,GAAIhzB,KAAKixB,WAAa,GAAKj1B,IAAIi1B,WAAa,EAAG,CACpDj1B,IAAIi1B,SAAW,EACfzS,EAAIxe,KAAKs2B,KAAKt6B,KACdA,IAAIi1B,SAAW,EACf,OAAOzS,EAAEwU,YAIX,IAAIlwB,EAAG1B,EACP,GAAIpB,KAAK9E,OAASc,IAAId,OAAQ,CAC5B4H,EAAI9C,KACJoB,EAAIpF,GACV,KAAW,CACL8G,EAAI9G,IACJoF,EAAIpB,KAGN,IAAIszB,MAAQ,EACZ,IAAK,IAAIt4B,EAAI,EAAGA,EAAIoG,EAAElG,OAAQF,IAAK,CACjCwjB,GAAK1b,EAAEouB,MAAMl2B,GAAK,IAAMoG,EAAE8vB,MAAMl2B,GAAK,GAAKs4B,MAC1CtzB,KAAKkxB,MAAMl2B,GAAKwjB,EAAI,SACpB8U,MAAQ9U,IAAM,GAEhB,KAAO8U,QAAU,GAAKt4B,EAAI8H,EAAE5H,OAAQF,IAAK,CACvCwjB,GAAK1b,EAAEouB,MAAMl2B,GAAK,GAAKs4B,MACvBtzB,KAAKkxB,MAAMl2B,GAAKwjB,EAAI,SACpB8U,MAAQ9U,IAAM,GAGhBxe,KAAK9E,OAAS4H,EAAE5H,OAChB,GAAIo4B,QAAU,EAAG,CACftzB,KAAKkxB,MAAMlxB,KAAK9E,QAAUo4B,MAC1BtzB,KAAK9E,QAEX,MAAW,GAAI4H,IAAM9C,KAAM,CACrB,KAAOhF,EAAI8H,EAAE5H,OAAQF,IAAK,CACxBgF,KAAKkxB,MAAMl2B,GAAK8H,EAAEouB,MAAMl2B,IAI5B,OAAOgF,IACR,EAGD8wB,GAAGnxB,UAAUwV,IAAM,SAASA,IAAKnZ,KAC/B,IAAIqL,IACJ,GAAIrL,IAAIi1B,WAAa,GAAKjxB,KAAKixB,WAAa,EAAG,CAC7Cj1B,IAAIi1B,SAAW,EACf5pB,IAAMrH,KAAKsM,IAAItQ,KACfA,IAAIi1B,UAAY,EAChB,OAAO5pB,GACb,MAAW,GAAIrL,IAAIi1B,WAAa,GAAKjxB,KAAKixB,WAAa,EAAG,CACpDjxB,KAAKixB,SAAW,EAChB5pB,IAAMrL,IAAIsQ,IAAItM,MACdA,KAAKixB,SAAW,EAChB,OAAO5pB,IAGT,GAAIrH,KAAK9E,OAASc,IAAId,OAAQ,OAAO8E,KAAK6R,QAAQwkB,KAAKr6B,KAEvD,OAAOA,IAAI6V,QAAQwkB,KAAKr2B,KACzB,EAGD8wB,GAAGnxB,UAAU22B,KAAO,SAASA,KAAMt6B,KAEjC,GAAIA,IAAIi1B,WAAa,EAAG,CACtBj1B,IAAIi1B,SAAW,EACf,IAAIzS,EAAIxe,KAAKq2B,KAAKr6B,KAClBA,IAAIi1B,SAAW,EACf,OAAOzS,EAAEwU,WAGf,MAAW,GAAIhzB,KAAKixB,WAAa,EAAG,CAC9BjxB,KAAKixB,SAAW,EAChBjxB,KAAKq2B,KAAKr6B,KACVgE,KAAKixB,SAAW,EAChB,OAAOjxB,KAAKgzB,YAId,IAAI1B,IAAMtxB,KAAKsxB,IAAIt1B,KAGnB,GAAIs1B,MAAQ,EAAG,CACbtxB,KAAKixB,SAAW,EAChBjxB,KAAK9E,OAAS,EACd8E,KAAKkxB,MAAM,GAAK,EAChB,OAAOlxB,KAIT,IAAI8C,EAAG1B,EACP,GAAIkwB,IAAM,EAAG,CACXxuB,EAAI9C,KACJoB,EAAIpF,GACV,KAAW,CACL8G,EAAI9G,IACJoF,EAAIpB,KAGN,IAAIszB,MAAQ,EACZ,IAAK,IAAIt4B,EAAI,EAAGA,EAAIoG,EAAElG,OAAQF,IAAK,CACjCwjB,GAAK1b,EAAEouB,MAAMl2B,GAAK,IAAMoG,EAAE8vB,MAAMl2B,GAAK,GAAKs4B,MAC1CA,MAAQ9U,GAAK,GACbxe,KAAKkxB,MAAMl2B,GAAKwjB,EAAI,SAEtB,KAAO8U,QAAU,GAAKt4B,EAAI8H,EAAE5H,OAAQF,IAAK,CACvCwjB,GAAK1b,EAAEouB,MAAMl2B,GAAK,GAAKs4B,MACvBA,MAAQ9U,GAAK,GACbxe,KAAKkxB,MAAMl2B,GAAKwjB,EAAI,SAItB,GAAI8U,QAAU,GAAKt4B,EAAI8H,EAAE5H,QAAU4H,IAAM9C,KAAM,CAC7C,KAAOhF,EAAI8H,EAAE5H,OAAQF,IAAK,CACxBgF,KAAKkxB,MAAMl2B,GAAK8H,EAAEouB,MAAMl2B,IAI5BgF,KAAK9E,OAAS2C,KAAKkH,IAAI/E,KAAK9E,OAAQF,GAEpC,GAAI8H,IAAM9C,KAAM,CACdA,KAAKixB,SAAW,EAGlB,OAAOjxB,KAAK+xB,QACb,EAGDjB,GAAGnxB,UAAU2M,IAAM,SAASA,IAAKtQ,KAC/B,OAAOgE,KAAK6R,QAAQykB,KAAKt6B,IAC1B,EAED,SAASu6B,WAAYC,KAAMx6B,IAAKkM,KAC9BA,IAAI+oB,SAAWj1B,IAAIi1B,SAAWuF,KAAKvF,SACnC,IAAIh2B,IAAOu7B,KAAKt7B,OAASc,IAAId,OAAU,EACvCgN,IAAIhN,OAASD,IACbA,IAAOA,IAAM,EAAK,EAGlB,IAAI6H,EAAI0zB,KAAKtF,MAAM,GAAK,EACxB,IAAI9vB,EAAIpF,IAAIk1B,MAAM,GAAK,EACvB,IAAI1S,EAAI1b,EAAI1B,EAEZ,IAAI0I,GAAK0U,EAAI,SACb,IAAI8U,MAAS9U,EAAI,SAAa,EAC9BtW,IAAIgpB,MAAM,GAAKpnB,GAEf,IAAK,IAAI8R,EAAI,EAAGA,EAAI3gB,IAAK2gB,IAAK,CAG5B,IAAI6a,OAASnD,QAAU,GACvB,IAAIoD,MAAQpD,MAAQ,SACpB,IAAIqD,KAAO94B,KAAKoF,IAAI2Y,EAAG5f,IAAId,OAAS,GACpC,IAAK,IAAIgL,EAAIrI,KAAKkH,IAAI,EAAG6W,EAAI4a,KAAKt7B,OAAS,GAAIgL,GAAKywB,KAAMzwB,IAAK,CAC7D,IAAIlL,EAAK4gB,EAAI1V,EAAK,EAClBpD,EAAI0zB,KAAKtF,MAAMl2B,GAAK,EACpBoG,EAAIpF,IAAIk1B,MAAMhrB,GAAK,EACnBsY,EAAI1b,EAAI1B,EAAIs1B,MACZD,QAAWjY,EAAI,SAAa,EAC5BkY,MAAQlY,EAAI,SAEdtW,IAAIgpB,MAAMtV,GAAK8a,MAAQ,EACvBpD,MAAQmD,OAAS,EAEnB,GAAInD,QAAU,EAAG,CACfprB,IAAIgpB,MAAMtV,GAAK0X,MAAQ,CAC7B,KAAW,CACLprB,IAAIhN,SAGN,OAAOgN,IAAI6pB,SAMb,IAAI6E,YAAc,SAASA,YAAaJ,KAAMx6B,IAAKkM,KACjD,IAAIpF,EAAI0zB,KAAKtF,MACb,IAAI9vB,EAAIpF,IAAIk1B,MACZ,IAAI2F,EAAI3uB,IAAIgpB,MACZ,IAAIjzB,EAAI,EACR,IAAI6L,GACJ,IAAIgtB,IACJ,IAAI/sB,GACJ,IAAIgtB,GAAKj0B,EAAE,GAAK,EAChB,IAAIk0B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAKp0B,EAAE,GAAK,EAChB,IAAIq0B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAKv0B,EAAE,GAAK,EAChB,IAAIw0B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAK10B,EAAE,GAAK,EAChB,IAAI20B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAK70B,EAAE,GAAK,EAChB,IAAI80B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAKh1B,EAAE,GAAK,EAChB,IAAIi1B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAKn1B,EAAE,GAAK,EAChB,IAAIo1B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAKt1B,EAAE,GAAK,EAChB,IAAIu1B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAKz1B,EAAE,GAAK,EAChB,IAAI01B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAK51B,EAAE,GAAK,EAChB,IAAI61B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAKz3B,EAAE,GAAK,EAChB,IAAI03B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAK53B,EAAE,GAAK,EAChB,IAAI63B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIpK,GAAKxtB,EAAE,GAAK,EAChB,IAAI+3B,IAAMvK,GAAK,KACf,IAAIwK,IAAMxK,KAAO,GACjB,IAAIyK,GAAKj4B,EAAE,GAAK,EAChB,IAAIk4B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIxK,GAAKztB,EAAE,GAAK,EAChB,IAAIo4B,IAAM3K,GAAK,KACf,IAAI4K,IAAM5K,KAAO,GACjB,IAAIC,GAAK1tB,EAAE,GAAK,EAChB,IAAIs4B,IAAM5K,GAAK,KACf,IAAI6K,IAAM7K,KAAO,GACjB,IAAI8K,GAAKx4B,EAAE,GAAK,EAChB,IAAIy4B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAK34B,EAAE,GAAK,EAChB,IAAI44B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAK94B,EAAE,GAAK,EAChB,IAAI+4B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GACjB,IAAIG,GAAKj5B,EAAE,GAAK,EAChB,IAAIk5B,IAAMD,GAAK,KACf,IAAIE,IAAMF,KAAO,GAEjBnyB,IAAI+oB,SAAWuF,KAAKvF,SAAWj1B,IAAIi1B,SACnC/oB,IAAIhN,OAAS,GAEb4O,GAAKjM,KAAK28B,KAAKxD,IAAK8B,KACpBhC,IAAMj5B,KAAK28B,KAAKxD,IAAK+B,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAK6B,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAKvD,IAAK8B,KACpB,IAAI0B,IAAQx8B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM2D,KAAO,IAAO,EAChDA,IAAM,SAEN3wB,GAAKjM,KAAK28B,KAAKrD,IAAK2B,KACpBhC,IAAMj5B,KAAK28B,KAAKrD,IAAK4B,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAK0B,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAKpD,IAAK2B,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAKiC,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAKkC,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAKgC,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAKiC,KAAQ,EAClC,IAAIwB,IAAQz8B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM4D,KAAO,IAAO,EAChDA,IAAM,SAEN5wB,GAAKjM,KAAK28B,KAAKlD,IAAKwB,KACpBhC,IAAMj5B,KAAK28B,KAAKlD,IAAKyB,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAKuB,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAKjD,IAAKwB,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAK8B,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAK+B,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAK6B,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAK8B,KAAQ,EAClCpvB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAKmC,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAKoC,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAKkC,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAKmC,KAAQ,EAClC,IAAIuB,IAAQ18B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM6D,KAAO,IAAO,EAChDA,IAAM,SAEN7wB,GAAKjM,KAAK28B,KAAK/C,IAAKqB,KACpBhC,IAAMj5B,KAAK28B,KAAK/C,IAAKsB,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAKoB,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAK9C,IAAKqB,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAK2B,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAK4B,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAK0B,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAK2B,KAAQ,EAClCpvB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAKgC,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAKiC,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAK+B,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAKgC,KAAQ,EAClCtvB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAKsC,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAKuC,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAKqC,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAKsC,KAAQ,EAClC,IAAIqB,IAAQ38B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAEN9wB,GAAKjM,KAAK28B,KAAK5C,IAAKkB,KACpBhC,IAAMj5B,KAAK28B,KAAK5C,IAAKmB,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAKiB,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAK3C,IAAKkB,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAKwB,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAKyB,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAKuB,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAKwB,KAAQ,EAClCpvB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAK6B,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAK8B,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAK4B,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAK6B,KAAQ,EAClCtvB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAKmC,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAKoC,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAKkC,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAKmC,KAAQ,EAClCzvB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAKwC,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAKyC,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAKuC,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAKwC,KAAQ,EAClC,IAAIoB,IAAQ58B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM+D,KAAO,IAAO,EAChDA,IAAM,SAEN/wB,GAAKjM,KAAK28B,KAAKzC,IAAKe,KACpBhC,IAAMj5B,KAAK28B,KAAKzC,IAAKgB,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAKc,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAKxC,IAAKe,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAKqB,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAKsB,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAKoB,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAKqB,KAAQ,EAClCpvB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAK0B,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAK2B,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAKyB,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAK0B,KAAQ,EAClCtvB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAKgC,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAKiC,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAK+B,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAKgC,KAAQ,EAClCzvB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAKqC,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAKsC,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAKoC,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAKqC,KAAQ,EAClC3vB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAK0C,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAK2C,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAKyC,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAK0C,KAAQ,EAClC,IAAImB,IAAQ78B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAENhxB,GAAKjM,KAAK28B,KAAKtC,IAAKY,KACpBhC,IAAMj5B,KAAK28B,KAAKtC,IAAKa,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAKW,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAKrC,IAAKY,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAKkB,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAKmB,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAKiB,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAKkB,KAAQ,EAClCpvB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAKuB,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAKwB,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAKsB,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAKuB,KAAQ,EAClCtvB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAK6B,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAK8B,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAK4B,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAK6B,KAAQ,EAClCzvB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAKkC,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAKmC,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAKiC,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAKkC,KAAQ,EAClC3vB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAKuC,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAKwC,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAKsC,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAKuC,KAAQ,EAClC7vB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAK6C,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAK8C,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAK4C,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAK6C,KAAQ,EAClC,IAAIiB,IAAQ98B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAENjxB,GAAKjM,KAAK28B,KAAKnC,IAAKS,KACpBhC,IAAMj5B,KAAK28B,KAAKnC,IAAKU,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAKQ,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAKlC,IAAKS,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAKe,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAKgB,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAKc,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAKe,KAAQ,EAClCpvB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAKoB,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAKqB,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAKmB,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAKoB,KAAQ,EAClCtvB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAK0B,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAK2B,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAKyB,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAK0B,KAAQ,EAClCzvB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAK+B,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAKgC,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAK8B,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAK+B,KAAQ,EAClC3vB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAKoC,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAKqC,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAKmC,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAKoC,KAAQ,EAClC7vB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAK0C,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAK2C,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAKyC,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAK0C,KAAQ,EAClChwB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAKgD,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAKiD,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAK+C,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAKgD,KAAQ,EAClC,IAAIe,IAAQ/8B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAENlxB,GAAKjM,KAAK28B,KAAKhC,IAAKM,KACpBhC,IAAMj5B,KAAK28B,KAAKhC,IAAKO,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAKK,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAK/B,IAAKM,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAKY,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAKa,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAKW,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAKY,KAAQ,EAClCpvB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAKiB,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAKkB,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAKgB,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAKiB,KAAQ,EAClCtvB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAKuB,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAKwB,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAKsB,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAKuB,KAAQ,EAClCzvB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAK4B,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAK6B,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAK2B,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAK4B,KAAQ,EAClC3vB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAKiC,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAKkC,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAKgC,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAKiC,KAAQ,EAClC7vB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAKuC,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAKwC,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAKsC,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAKuC,KAAQ,EAClChwB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAK6C,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAK8C,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAK4C,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAK6C,KAAQ,EAClCnwB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAKmD,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAKoD,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAKkD,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAKmD,KAAQ,EAClC,IAAIa,IAAQh9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAENnxB,GAAKjM,KAAK28B,KAAK7B,IAAKG,KACpBhC,IAAMj5B,KAAK28B,KAAK7B,IAAKI,KACrBjC,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKE,KAAQ,EACpC/uB,GAAKlM,KAAK28B,KAAK5B,IAAKG,KACpBjvB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAKS,KAAQ,EAClCnC,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAKU,KAAQ,EACpCpC,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAKQ,KAAQ,EACpClvB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAKS,KAAQ,EAClCpvB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAKc,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAKe,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAKa,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAKc,KAAQ,EAClCtvB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAKoB,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAKqB,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAKmB,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAKoB,KAAQ,EAClCzvB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAKyB,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAK0B,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAKwB,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAKyB,KAAQ,EAClC3vB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAK8B,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAK+B,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAK6B,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAK8B,KAAQ,EAClC7vB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAKoC,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAKqC,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAKmC,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAKoC,KAAQ,EAClChwB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAK0C,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAK2C,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAKyC,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAK0C,KAAQ,EAClCnwB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAKgD,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAKiD,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAK+C,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAKgD,KAAQ,EAClCtwB,GAAMA,GAAKjM,KAAK28B,KAAKxD,IAAKsD,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAKxD,IAAKuD,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAKvD,IAAKqD,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAKvD,IAAKsD,KAAQ,EAClC,IAAIW,IAAQj9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACrD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAENpxB,GAAKjM,KAAK28B,KAAK7B,IAAKM,KACpBnC,IAAMj5B,KAAK28B,KAAK7B,IAAKO,KACrBpC,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKK,KAAQ,EACpClvB,GAAKlM,KAAK28B,KAAK5B,IAAKM,KACpBpvB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAKW,KAAQ,EAClCrC,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAKY,KAAQ,EACpCtC,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAKU,KAAQ,EACpCpvB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAKW,KAAQ,EAClCtvB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAKiB,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAKkB,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAKgB,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAKiB,KAAQ,EAClCzvB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAKsB,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAKuB,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAKqB,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAKsB,KAAQ,EAClC3vB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAK2B,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAK4B,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAK0B,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAK2B,KAAQ,EAClC7vB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAKiC,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAKkC,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAKgC,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAKiC,KAAQ,EAClChwB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAKuC,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAKwC,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAKsC,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAKuC,KAAQ,EAClCnwB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAK6C,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAK8C,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAK4C,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAK6C,KAAQ,EAClCtwB,GAAMA,GAAKjM,KAAK28B,KAAKrD,IAAKmD,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAKrD,IAAKoD,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAKpD,IAAKkD,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAKpD,IAAKmD,KAAQ,EAClC,IAAIY,KAASl9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMqE,MAAQ,IAAO,EACjDA,KAAO,SAEPrxB,GAAKjM,KAAK28B,KAAK7B,IAAKQ,KACpBrC,IAAMj5B,KAAK28B,KAAK7B,IAAKS,KACrBtC,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKO,KAAQ,EACpCpvB,GAAKlM,KAAK28B,KAAK5B,IAAKQ,KACpBtvB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAKc,KAAQ,EAClCxC,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAKe,KAAQ,EACpCzC,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAKa,KAAQ,EACpCvvB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAKc,KAAQ,EAClCzvB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAKmB,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAKoB,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAKkB,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAKmB,KAAQ,EAClC3vB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAKwB,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAKyB,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAKuB,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAKwB,KAAQ,EAClC7vB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAK8B,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAK+B,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAK6B,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAK8B,KAAQ,EAClChwB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAKoC,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAKqC,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAKmC,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAKoC,KAAQ,EAClCnwB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAK0C,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAK2C,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAKyC,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAK0C,KAAQ,EAClCtwB,GAAMA,GAAKjM,KAAK28B,KAAKlD,IAAKgD,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAKlD,IAAKiD,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAKjD,IAAK+C,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAKjD,IAAKgD,KAAQ,EAClC,IAAIa,KAASn9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMsE,MAAQ,IAAO,EACjDA,KAAO,SAEPtxB,GAAKjM,KAAK28B,KAAK7B,IAAKW,KACpBxC,IAAMj5B,KAAK28B,KAAK7B,IAAKY,KACrBzC,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKU,KAAQ,EACpCvvB,GAAKlM,KAAK28B,KAAK5B,IAAKW,KACpBzvB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAKgB,KAAQ,EAClC1C,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAKiB,KAAQ,EACpC3C,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAKe,KAAQ,EACpCzvB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAKgB,KAAQ,EAClC3vB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAKqB,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAKsB,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAKoB,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAKqB,KAAQ,EAClC7vB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAK2B,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAK4B,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAK0B,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAK2B,KAAQ,EAClChwB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAKiC,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAKkC,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAKgC,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAKiC,KAAQ,EAClCnwB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAKuC,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAKwC,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAKsC,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAKuC,KAAQ,EAClCtwB,GAAMA,GAAKjM,KAAK28B,KAAK/C,IAAK6C,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAK/C,IAAK8C,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAK9C,IAAK4C,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAK9C,IAAK6C,KAAQ,EAClC,IAAIc,KAASp9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMuE,MAAQ,IAAO,EACjDA,KAAO,SAEPvxB,GAAKjM,KAAK28B,KAAK7B,IAAKa,KACpB1C,IAAMj5B,KAAK28B,KAAK7B,IAAKc,KACrB3C,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKY,KAAQ,EACpCzvB,GAAKlM,KAAK28B,KAAK5B,IAAKa,KACpB3vB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAKkB,KAAQ,EAClC5C,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAKmB,KAAQ,EACpC7C,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAKiB,KAAQ,EACpC3vB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAKkB,KAAQ,EAClC7vB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAKwB,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAKyB,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAKuB,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAKwB,KAAQ,EAClChwB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAK8B,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAK+B,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAK6B,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAK8B,KAAQ,EAClCnwB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAKoC,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAKqC,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAKmC,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAKoC,KAAQ,EAClCtwB,GAAMA,GAAKjM,KAAK28B,KAAK5C,IAAK0C,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAK5C,IAAK2C,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAK3C,IAAKyC,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAK3C,IAAK0C,KAAQ,EAClC,IAAIe,KAASr9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMwE,MAAQ,IAAO,EACjDA,KAAO,SAEPxxB,GAAKjM,KAAK28B,KAAK7B,IAAKe,KACpB5C,IAAMj5B,KAAK28B,KAAK7B,IAAKgB,KACrB7C,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKc,KAAQ,EACpC3vB,GAAKlM,KAAK28B,KAAK5B,IAAKe,KACpB7vB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAKqB,KAAQ,EAClC/C,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAKsB,KAAQ,EACpChD,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAKoB,KAAQ,EACpC9vB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAKqB,KAAQ,EAClChwB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAK2B,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAK4B,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAK0B,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAK2B,KAAQ,EAClCnwB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAKiC,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAKkC,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAKgC,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAKiC,KAAQ,EAClCtwB,GAAMA,GAAKjM,KAAK28B,KAAKzC,IAAKuC,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAKzC,IAAKwC,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAKxC,IAAKsC,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAKxC,IAAKuC,KAAQ,EAClC,IAAIgB,KAASt9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAMyE,MAAQ,IAAO,EACjDA,KAAO,SAEPzxB,GAAKjM,KAAK28B,KAAK7B,IAAKkB,KACpB/C,IAAMj5B,KAAK28B,KAAK7B,IAAKmB,KACrBhD,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKiB,KAAQ,EACpC9vB,GAAKlM,KAAK28B,KAAK5B,IAAKkB,KACpBhwB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAKwB,KAAQ,EAClClD,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAKyB,KAAQ,EACpCnD,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAKuB,KAAQ,EACpCjwB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAKwB,KAAQ,EAClCnwB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAK8B,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAK+B,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAK6B,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAK8B,KAAQ,EAClCtwB,GAAMA,GAAKjM,KAAK28B,KAAKtC,IAAKoC,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAKtC,IAAKqC,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAKrC,IAAKmC,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAKrC,IAAKoC,KAAQ,EAClC,IAAIiB,KAASv9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM0E,MAAQ,IAAO,EACjDA,KAAO,SAEP1xB,GAAKjM,KAAK28B,KAAK7B,IAAKqB,KACpBlD,IAAMj5B,KAAK28B,KAAK7B,IAAKsB,KACrBnD,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKoB,KAAQ,EACpCjwB,GAAKlM,KAAK28B,KAAK5B,IAAKqB,KACpBnwB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAK2B,KAAQ,EAClCrD,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAK4B,KAAQ,EACpCtD,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAK0B,KAAQ,EACpCpwB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAK2B,KAAQ,EAClCtwB,GAAMA,GAAKjM,KAAK28B,KAAKnC,IAAKiC,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAKnC,IAAKkC,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAKlC,IAAKgC,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAKlC,IAAKiC,KAAQ,EAClC,IAAIkB,KAASx9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM2E,MAAQ,IAAO,EACjDA,KAAO,SAEP3xB,GAAKjM,KAAK28B,KAAK7B,IAAKwB,KACpBrD,IAAMj5B,KAAK28B,KAAK7B,IAAKyB,KACrBtD,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAKuB,KAAQ,EACpCpwB,GAAKlM,KAAK28B,KAAK5B,IAAKwB,KACpBtwB,GAAMA,GAAKjM,KAAK28B,KAAKhC,IAAK8B,KAAQ,EAClCxD,IAAOA,IAAMj5B,KAAK28B,KAAKhC,IAAK+B,KAAQ,EACpCzD,IAAOA,IAAMj5B,KAAK28B,KAAK/B,IAAK6B,KAAQ,EACpCvwB,GAAMA,GAAKlM,KAAK28B,KAAK/B,IAAK8B,KAAQ,EAClC,IAAImB,KAASz9B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM4E,MAAQ,IAAO,EACjDA,KAAO,SAEP5xB,GAAKjM,KAAK28B,KAAK7B,IAAK2B,KACpBxD,IAAMj5B,KAAK28B,KAAK7B,IAAK4B,KACrBzD,IAAOA,IAAMj5B,KAAK28B,KAAK5B,IAAK0B,KAAQ,EACpCvwB,GAAKlM,KAAK28B,KAAK5B,IAAK2B,KACpB,IAAIoB,KAAS19B,EAAI6L,GAAM,KAAOgtB,IAAM,OAAW,IAAO,EACtD74B,GAAO8L,IAAM+sB,MAAQ,IAAO,IAAM6E,MAAQ,IAAO,EACjDA,KAAO,SACP9E,EAAE,GAAK4D,GACP5D,EAAE,GAAK6D,GACP7D,EAAE,GAAK8D,GACP9D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,IAAMsE,IACRtE,EAAE,IAAMuE,IACRvE,EAAE,IAAMwE,IACRxE,EAAE,IAAMyE,IACRzE,EAAE,IAAM0E,IACR1E,EAAE,IAAM2E,IACR3E,EAAE,IAAM4E,IACR5E,EAAE,IAAM6E,IACR7E,EAAE,IAAM8E,IACR,GAAI19B,IAAM,EAAG,CACX44B,EAAE,IAAM54B,EACRiK,IAAIhN,SAEN,OAAOgN,GACR,EAGD,IAAKrK,KAAK28B,KAAM,CACd5D,YAAcL,WAGhB,SAASqF,SAAUpF,KAAMx6B,IAAKkM,KAC5BA,IAAI+oB,SAAWj1B,IAAIi1B,SAAWuF,KAAKvF,SACnC/oB,IAAIhN,OAASs7B,KAAKt7B,OAASc,IAAId,OAE/B,IAAIo4B,MAAQ,EACZ,IAAIuI,QAAU,EACd,IAAK,IAAIjgB,EAAI,EAAGA,EAAI1T,IAAIhN,OAAS,EAAG0gB,IAAK,CAGvC,IAAI6a,OAASoF,QACbA,QAAU,EACV,IAAInF,MAAQpD,MAAQ,SACpB,IAAIqD,KAAO94B,KAAKoF,IAAI2Y,EAAG5f,IAAId,OAAS,GACpC,IAAK,IAAIgL,EAAIrI,KAAKkH,IAAI,EAAG6W,EAAI4a,KAAKt7B,OAAS,GAAIgL,GAAKywB,KAAMzwB,IAAK,CAC7D,IAAIlL,EAAI4gB,EAAI1V,EACZ,IAAIpD,EAAI0zB,KAAKtF,MAAMl2B,GAAK,EACxB,IAAIoG,EAAIpF,IAAIk1B,MAAMhrB,GAAK,EACvB,IAAIsY,EAAI1b,EAAI1B,EAEZ,IAAI0I,GAAK0U,EAAI,SACbiY,OAAUA,QAAWjY,EAAI,SAAa,GAAM,EAC5C1U,GAAMA,GAAK4sB,MAAS,EACpBA,MAAQ5sB,GAAK,SACb2sB,OAAUA,QAAU3sB,KAAO,IAAO,EAElC+xB,SAAWpF,SAAW,GACtBA,QAAU,SAEZvuB,IAAIgpB,MAAMtV,GAAK8a,MACfpD,MAAQmD,OACRA,OAASoF,QAEX,GAAIvI,QAAU,EAAG,CACfprB,IAAIgpB,MAAMtV,GAAK0X,KACrB,KAAW,CACLprB,IAAIhN,SAGN,OAAOgN,IAAI6pB,SAGb,SAAS+J,WAAYtF,KAAMx6B,IAAKkM,KAI9B,OAAO0zB,SAASpF,KAAMx6B,IAAKkM,KAG7B4oB,GAAGnxB,UAAUo8B,MAAQ,SAASA,MAAO//B,IAAKkM,KACxC,IAAIb,IACJ,IAAIpM,IAAM+E,KAAK9E,OAASc,IAAId,OAC5B,GAAI8E,KAAK9E,SAAW,IAAMc,IAAId,SAAW,GAAI,CAC3CmM,IAAMuvB,YAAY52B,KAAMhE,IAAKkM,IACnC,MAAW,GAAIjN,IAAM,GAAI,CACnBoM,IAAMkvB,WAAWv2B,KAAMhE,IAAKkM,IAClC,MAAW,GAAIjN,IAAM,KAAM,CACrBoM,IAAMu0B,SAAS57B,KAAMhE,IAAKkM,IAChC,KAAW,CACLb,IAAMy0B,WAAW97B,KAAMhE,IAAKkM,KAG9B,OAAOb,GACR,EAuMDypB,GAAGnxB,UAAUiJ,IAAM,SAASA,IAAK5M,KAC/B,IAAIkM,IAAM,IAAI4oB,GAAG,MACjB5oB,IAAIgpB,MAAQ,IAAIp2B,MAAMkF,KAAK9E,OAASc,IAAId,QACxC,OAAO8E,KAAK+7B,MAAM//B,IAAKkM,IACxB,EAGD4oB,GAAGnxB,UAAUq8B,KAAO,SAASA,KAAMhgC,KACjC,IAAIkM,IAAM,IAAI4oB,GAAG,MACjB5oB,IAAIgpB,MAAQ,IAAIp2B,MAAMkF,KAAK9E,OAASc,IAAId,QACxC,OAAO4gC,WAAW97B,KAAMhE,IAAKkM,IAC9B,EAGD4oB,GAAGnxB,UAAU66B,KAAO,SAASA,KAAMx+B,KACjC,OAAOgE,KAAK6R,QAAQkqB,MAAM//B,IAAKgE,KAChC,EAED8wB,GAAGnxB,UAAU8yB,MAAQ,SAASA,MAAOz2B,KACnC,IAAIigC,SAAWjgC,IAAM,EACrB,GAAIigC,SAAUjgC,KAAOA,IAErBw0B,cAAcx0B,MAAQ,UACtBw0B,OAAOx0B,IAAM,UAGb,IAAIs3B,MAAQ,EACZ,IAAK,IAAIt4B,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CACpC,IAAI62B,GAAK7xB,KAAKkxB,MAAMl2B,GAAK,GAAKgB,IAC9B,IAAI8N,IAAM+nB,EAAI,WAAcyB,MAAQ,UACpCA,QAAU,GACVA,OAAUzB,EAAI,SAAa,EAE3ByB,OAASxpB,KAAO,GAChB9J,KAAKkxB,MAAMl2B,GAAK8O,GAAK,SAGvB,GAAIwpB,QAAU,EAAG,CACftzB,KAAKkxB,MAAMl2B,GAAKs4B,MAChBtzB,KAAK9E,SAGP,OAAO+gC,SAAWj8B,KAAKo1B,OAASp1B,IACjC,EAED8wB,GAAGnxB,UAAUu8B,KAAO,SAASA,KAAMlgC,KACjC,OAAOgE,KAAK6R,QAAQ4gB,MAAMz2B,IAC3B,EAGD80B,GAAGnxB,UAAUyf,IAAM,SAASA,MAC1B,OAAOpf,KAAK4I,IAAI5I,KACjB,EAGD8wB,GAAGnxB,UAAUw8B,KAAO,SAASA,OAC3B,OAAOn8B,KAAKw6B,KAAKx6B,KAAK6R,QACvB,EAGDif,GAAGnxB,UAAU7B,IAAM,SAASA,IAAK9B,KAC/B,IAAI61B,EAAI4C,WAAWz4B,KACnB,GAAI61B,EAAE32B,SAAW,EAAG,OAAO,IAAI41B,GAAG,GAGlC,IAAIzpB,IAAMrH,KACV,IAAK,IAAIhF,EAAI,EAAGA,EAAI62B,EAAE32B,OAAQF,IAAKqM,IAAMA,IAAI+X,MAAO,CAClD,GAAIyS,EAAE72B,KAAO,EAAG,MAGlB,KAAMA,EAAI62B,EAAE32B,OAAQ,CAClB,IAAK,IAAIqjB,EAAIlX,IAAI+X,MAAOpkB,EAAI62B,EAAE32B,OAAQF,IAAKujB,EAAIA,EAAEa,MAAO,CACtD,GAAIyS,EAAE72B,KAAO,EAAG,SAEhBqM,IAAMA,IAAIuB,IAAI2V,IAIlB,OAAOlX,GACR,EAGDypB,GAAGnxB,UAAUy8B,OAAS,SAASA,OAAQ3Y,MACrC+M,cAAc/M,OAAS,UAAYA,MAAQ,GAC3C,IAAIjF,EAAIiF,KAAO,GACf,IAAI/lB,GAAK+lB,KAAOjF,GAAK,GACrB,IAAI6d,UAAa,WAAe,GAAK7d,GAAQ,GAAKA,EAClD,IAAIxjB,EAEJ,GAAIwjB,IAAM,EAAG,CACX,IAAI8U,MAAQ,EAEZ,IAAKt4B,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CAChC,IAAIshC,SAAWt8B,KAAKkxB,MAAMl2B,GAAKqhC,UAC/B,IAAIp+B,GAAM+B,KAAKkxB,MAAMl2B,GAAK,GAAKshC,UAAa9d,EAC5Cxe,KAAKkxB,MAAMl2B,GAAKiD,EAAIq1B,MACpBA,MAAQgJ,WAAc,GAAK9d,EAG7B,GAAI8U,MAAO,CACTtzB,KAAKkxB,MAAMl2B,GAAKs4B,MAChBtzB,KAAK9E,UAIT,GAAIwC,IAAM,EAAG,CACX,IAAK1C,EAAIgF,KAAK9E,OAAS,EAAGF,GAAK,EAAGA,IAAK,CACrCgF,KAAKkxB,MAAMl2B,EAAI0C,GAAKsC,KAAKkxB,MAAMl2B,GAGjC,IAAKA,EAAI,EAAGA,EAAI0C,EAAG1C,IAAK,CACtBgF,KAAKkxB,MAAMl2B,GAAK,EAGlBgF,KAAK9E,QAAUwC,EAGjB,OAAOsC,KAAK+xB,QACb,EAEDjB,GAAGnxB,UAAU48B,MAAQ,SAASA,MAAO9Y,MAEnC+M,OAAOxwB,KAAKixB,WAAa,GACzB,OAAOjxB,KAAKo8B,OAAO3Y,KACpB,EAKDqN,GAAGnxB,UAAU68B,OAAS,SAASA,OAAQ/Y,KAAMgZ,KAAMC,UACjDlM,cAAc/M,OAAS,UAAYA,MAAQ,GAC3C,IAAItT,EACJ,GAAIssB,KAAM,CACRtsB,GAAKssB,KAAQA,KAAO,IAAO,EACjC,KAAW,CACLtsB,EAAI,EAGN,IAAIqO,EAAIiF,KAAO,GACf,IAAI/lB,EAAIG,KAAKoF,KAAKwgB,KAAOjF,GAAK,GAAIxe,KAAK9E,QACvC,IAAI6pB,KAAO,SAAc,WAAcvG,GAAMA,EAC7C,IAAIme,YAAcD,SAElBvsB,GAAKzS,EACLyS,EAAItS,KAAKkH,IAAI,EAAGoL,GAGhB,GAAIwsB,YAAa,CACf,IAAK,IAAI3hC,EAAI,EAAGA,EAAI0C,EAAG1C,IAAK,CAC1B2hC,YAAYzL,MAAMl2B,GAAKgF,KAAKkxB,MAAMl2B,GAEpC2hC,YAAYzhC,OAASwC,EAGvB,GAAIA,IAAM,QAEH,GAAIsC,KAAK9E,OAASwC,EAAG,CAC1BsC,KAAK9E,QAAUwC,EACf,IAAK1C,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CAChCgF,KAAKkxB,MAAMl2B,GAAKgF,KAAKkxB,MAAMl2B,EAAI0C,GAEvC,KAAW,CACLsC,KAAKkxB,MAAM,GAAK,EAChBlxB,KAAK9E,OAAS,EAGhB,IAAIo4B,MAAQ,EACZ,IAAKt4B,EAAIgF,KAAK9E,OAAS,EAAGF,GAAK,IAAMs4B,QAAU,GAAKt4B,GAAKmV,GAAInV,IAAK,CAChE,IAAIkW,KAAOlR,KAAKkxB,MAAMl2B,GAAK,EAC3BgF,KAAKkxB,MAAMl2B,GAAMs4B,OAAU,GAAK9U,EAAOtN,OAASsN,EAChD8U,MAAQpiB,KAAO6T,KAIjB,GAAI4X,aAAerJ,QAAU,EAAG,CAC9BqJ,YAAYzL,MAAMyL,YAAYzhC,UAAYo4B,MAG5C,GAAItzB,KAAK9E,SAAW,EAAG,CACrB8E,KAAKkxB,MAAM,GAAK,EAChBlxB,KAAK9E,OAAS,EAGhB,OAAO8E,KAAK+xB,QACb,EAEDjB,GAAGnxB,UAAUi9B,MAAQ,SAASA,MAAOnZ,KAAMgZ,KAAMC,UAE/ClM,OAAOxwB,KAAKixB,WAAa,GACzB,OAAOjxB,KAAKw8B,OAAO/Y,KAAMgZ,KAAMC,SAChC,EAGD5L,GAAGnxB,UAAUk9B,KAAO,SAASA,KAAMpZ,MACjC,OAAOzjB,KAAK6R,QAAQ0qB,MAAM9Y,KAC3B,EAEDqN,GAAGnxB,UAAUm9B,MAAQ,SAASA,MAAOrZ,MACnC,OAAOzjB,KAAK6R,QAAQuqB,OAAO3Y,KAC5B,EAGDqN,GAAGnxB,UAAUo9B,KAAO,SAASA,KAAMtZ,MACjC,OAAOzjB,KAAK6R,QAAQ+qB,MAAMnZ,KAC3B,EAEDqN,GAAGnxB,UAAUq9B,MAAQ,SAASA,MAAOvZ,MACnC,OAAOzjB,KAAK6R,QAAQ2qB,OAAO/Y,KAC5B,EAGDqN,GAAGnxB,UAAUu1B,MAAQ,SAASA,MAAOR,KACnClE,cAAckE,MAAQ,UAAYA,KAAO,GACzC,IAAIlW,EAAIkW,IAAM,GACd,IAAIh3B,GAAKg3B,IAAMlW,GAAK,GACpB,IAAID,EAAI,GAAKC,EAGb,GAAIxe,KAAK9E,QAAUwC,EAAG,OAAO,MAG7B,IAAIm0B,EAAI7xB,KAAKkxB,MAAMxzB,GAEnB,SAAUm0B,EAAItT,EACf,EAGDuS,GAAGnxB,UAAUs9B,OAAS,SAASA,OAAQxZ,MACrC+M,cAAc/M,OAAS,UAAYA,MAAQ,GAC3C,IAAIjF,EAAIiF,KAAO,GACf,IAAI/lB,GAAK+lB,KAAOjF,GAAK,GAErBgS,OAAOxwB,KAAKixB,WAAa,EAAG,2CAE5B,GAAIjxB,KAAK9E,QAAUwC,EAAG,CACpB,OAAOsC,KAGT,GAAIwe,IAAM,EAAG,CACX9gB,IAEFsC,KAAK9E,OAAS2C,KAAKoF,IAAIvF,EAAGsC,KAAK9E,QAE/B,GAAIsjB,IAAM,EAAG,CACX,IAAIuG,KAAO,SAAc,WAAcvG,GAAMA,EAC7Cxe,KAAKkxB,MAAMlxB,KAAK9E,OAAS,IAAM6pB,KAGjC,OAAO/kB,KAAK+xB,QACb,EAGDjB,GAAGnxB,UAAUu9B,MAAQ,SAASA,MAAOzZ,MACnC,OAAOzjB,KAAK6R,QAAQorB,OAAOxZ,KAC5B,EAGDqN,GAAGnxB,UAAUq1B,MAAQ,SAASA,MAAOh5B,KACnCw0B,cAAcx0B,MAAQ,UACtBw0B,OAAOx0B,IAAM,UACb,GAAIA,IAAM,EAAG,OAAOgE,KAAKm9B,OAAOnhC,KAGhC,GAAIgE,KAAKixB,WAAa,EAAG,CACvB,GAAIjxB,KAAK9E,SAAW,IAAM8E,KAAKkxB,MAAM,GAAK,IAAMl1B,IAAK,CACnDgE,KAAKkxB,MAAM,GAAKl1B,KAAOgE,KAAKkxB,MAAM,GAAK,GACvClxB,KAAKixB,SAAW,EAChB,OAAOjxB,KAGTA,KAAKixB,SAAW,EAChBjxB,KAAKm9B,MAAMnhC,KACXgE,KAAKixB,SAAW,EAChB,OAAOjxB,KAIT,OAAOA,KAAK0yB,OAAO12B,IACpB,EAED80B,GAAGnxB,UAAU+yB,OAAS,SAASA,OAAQ12B,KACrCgE,KAAKkxB,MAAM,IAAMl1B,IAGjB,IAAK,IAAIhB,EAAI,EAAGA,EAAIgF,KAAK9E,QAAU8E,KAAKkxB,MAAMl2B,IAAM,SAAWA,IAAK,CAClEgF,KAAKkxB,MAAMl2B,IAAM,SACjB,GAAIA,IAAMgF,KAAK9E,OAAS,EAAG,CACzB8E,KAAKkxB,MAAMl2B,EAAI,GAAK,CAC5B,KAAa,CACLgF,KAAKkxB,MAAMl2B,EAAI,MAGnBgF,KAAK9E,OAAS2C,KAAKkH,IAAI/E,KAAK9E,OAAQF,EAAI,GAExC,OAAOgF,IACR,EAGD8wB,GAAGnxB,UAAUw9B,MAAQ,SAASA,MAAOnhC,KACnCw0B,cAAcx0B,MAAQ,UACtBw0B,OAAOx0B,IAAM,UACb,GAAIA,IAAM,EAAG,OAAOgE,KAAKg1B,OAAOh5B,KAEhC,GAAIgE,KAAKixB,WAAa,EAAG,CACvBjxB,KAAKixB,SAAW,EAChBjxB,KAAKg1B,MAAMh5B,KACXgE,KAAKixB,SAAW,EAChB,OAAOjxB,KAGTA,KAAKkxB,MAAM,IAAMl1B,IAEjB,GAAIgE,KAAK9E,SAAW,GAAK8E,KAAKkxB,MAAM,GAAK,EAAG,CAC1ClxB,KAAKkxB,MAAM,IAAMlxB,KAAKkxB,MAAM,GAC5BlxB,KAAKixB,SAAW,CACtB,KAAW,CAEL,IAAK,IAAIj2B,EAAI,EAAGA,EAAIgF,KAAK9E,QAAU8E,KAAKkxB,MAAMl2B,GAAK,EAAGA,IAAK,CACzDgF,KAAKkxB,MAAMl2B,IAAM,SACjBgF,KAAKkxB,MAAMl2B,EAAI,IAAM,GAIzB,OAAOgF,KAAK+xB,QACb,EAEDjB,GAAGnxB,UAAUy9B,KAAO,SAASA,KAAMphC,KACjC,OAAOgE,KAAK6R,QAAQmjB,MAAMh5B,IAC3B,EAED80B,GAAGnxB,UAAU09B,KAAO,SAASA,KAAMrhC,KACjC,OAAOgE,KAAK6R,QAAQsrB,MAAMnhC,IAC3B,EAED80B,GAAGnxB,UAAU29B,KAAO,SAASA,OAC3Bt9B,KAAKixB,SAAW,EAEhB,OAAOjxB,IACR,EAED8wB,GAAGnxB,UAAUxB,IAAM,SAASA,MAC1B,OAAO6B,KAAK6R,QAAQyrB,MACrB,EAEDxM,GAAGnxB,UAAU49B,aAAe,SAASA,aAAcvhC,IAAK4M,IAAKuI,OAC3D,IAAIlW,IAAMe,IAAId,OAASiW,MACvB,IAAInW,EAEJgF,KAAK8yB,QAAQ73B,KAEb,IAAI42B,EACJ,IAAIyB,MAAQ,EACZ,IAAKt4B,EAAI,EAAGA,EAAIgB,IAAId,OAAQF,IAAK,CAC/B62B,GAAK7xB,KAAKkxB,MAAMl2B,EAAImW,OAAS,GAAKmiB,MAClC,IAAI7J,OAASztB,IAAIk1B,MAAMl2B,GAAK,GAAK4N,IACjCipB,GAAKpI,MAAQ,SACb6J,OAASzB,GAAK,KAAQpI,MAAQ,SAAa,GAC3CzpB,KAAKkxB,MAAMl2B,EAAImW,OAAS0gB,EAAI,SAE9B,KAAO72B,EAAIgF,KAAK9E,OAASiW,MAAOnW,IAAK,CACnC62B,GAAK7xB,KAAKkxB,MAAMl2B,EAAImW,OAAS,GAAKmiB,MAClCA,MAAQzB,GAAK,GACb7xB,KAAKkxB,MAAMl2B,EAAImW,OAAS0gB,EAAI,SAG9B,GAAIyB,QAAU,EAAG,OAAOtzB,KAAK+xB,SAG7BvB,OAAO8C,SAAW,GAClBA,MAAQ,EACR,IAAKt4B,EAAI,EAAGA,EAAIgF,KAAK9E,OAAQF,IAAK,CAChC62B,IAAM7xB,KAAKkxB,MAAMl2B,GAAK,GAAKs4B,MAC3BA,MAAQzB,GAAK,GACb7xB,KAAKkxB,MAAMl2B,GAAK62B,EAAI,SAEtB7xB,KAAKixB,SAAW,EAEhB,OAAOjxB,KAAK+xB,QACb,EAEDjB,GAAGnxB,UAAU69B,SAAW,SAASA,SAAUxhC,IAAKyhC,MAC9C,IAAItsB,MAAQnR,KAAK9E,OAASc,IAAId,OAE9B,IAAI4H,EAAI9C,KAAK6R,QACb,IAAIzQ,EAAIpF,IAGR,IAAI0hC,IAAMt8B,EAAE8vB,MAAM9vB,EAAElG,OAAS,GAAK,EAClC,IAAIyiC,QAAU39B,KAAKs0B,WAAWoJ,KAC9BvsB,MAAQ,GAAKwsB,QACb,GAAIxsB,QAAU,EAAG,CACf/P,EAAIA,EAAE07B,MAAM3rB,OACZrO,EAAEs5B,OAAOjrB,OACTusB,IAAMt8B,EAAE8vB,MAAM9vB,EAAElG,OAAS,GAAK,EAIhC,IAAIkC,EAAI0F,EAAE5H,OAASkG,EAAElG,OACrB,IAAIqjB,EAEJ,GAAIkf,OAAS,MAAO,CAClBlf,EAAI,IAAIuS,GAAG,MACXvS,EAAErjB,OAASkC,EAAI,EACfmhB,EAAE2S,MAAQ,IAAIp2B,MAAMyjB,EAAErjB,QACtB,IAAK,IAAIF,EAAI,EAAGA,EAAIujB,EAAErjB,OAAQF,IAAK,CACjCujB,EAAE2S,MAAMl2B,GAAK,GAIjB,IAAI6f,KAAO/X,EAAE+O,QAAQ0rB,aAAan8B,EAAG,EAAGhE,GACxC,GAAIyd,KAAKoW,WAAa,EAAG,CACvBnuB,EAAI+X,KACJ,GAAI0D,EAAG,CACLA,EAAE2S,MAAM9zB,GAAK,GAIjB,IAAK,IAAI8I,EAAI9I,EAAI,EAAG8I,GAAK,EAAGA,IAAK,CAC/B,IAAI03B,IAAM96B,EAAEouB,MAAM9vB,EAAElG,OAASgL,GAAK,GAAK,UACpCpD,EAAEouB,MAAM9vB,EAAElG,OAASgL,EAAI,GAAK,GAI/B03B,GAAK//B,KAAKoF,IAAK26B,GAAKF,IAAO,EAAG,UAE9B56B,EAAEy6B,aAAan8B,EAAGw8B,GAAI13B,GACtB,MAAOpD,EAAEmuB,WAAa,EAAG,CACvB2M,KACA96B,EAAEmuB,SAAW,EACbnuB,EAAEy6B,aAAan8B,EAAG,EAAG8E,GACrB,IAAKpD,EAAE2wB,SAAU,CACf3wB,EAAEmuB,UAAY,GAGlB,GAAI1S,EAAG,CACLA,EAAE2S,MAAMhrB,GAAK03B,IAGjB,GAAIrf,EAAG,CACLA,EAAEwT,SAEJjvB,EAAEivB,SAGF,GAAI0L,OAAS,OAAStsB,QAAU,EAAG,CACjCrO,EAAE05B,OAAOrrB,OAGX,MAAO,CACL+Q,IAAK3D,GAAK,KACVR,IAAKjb,EAER,EAMDguB,GAAGnxB,UAAUk+B,OAAS,SAASA,OAAQ7hC,IAAKyhC,KAAMK,UAChDtN,QAAQx0B,IAAIy3B,UAEZ,GAAIzzB,KAAKyzB,SAAU,CACjB,MAAO,CACLvR,IAAK,IAAI4O,GAAG,GACZ/S,IAAK,IAAI+S,GAAG,IAIhB,IAAI5O,IAAKnE,IAAK1W,IACd,GAAIrH,KAAKixB,WAAa,GAAKj1B,IAAIi1B,WAAa,EAAG,CAC7C5pB,IAAMrH,KAAKuf,MAAMse,OAAO7hC,IAAKyhC,MAE7B,GAAIA,OAAS,MAAO,CAClBvb,IAAM7a,IAAI6a,IAAI3C,MAGhB,GAAIke,OAAS,MAAO,CAClB1f,IAAM1W,IAAI0W,IAAIwB,MACd,GAAIue,UAAY/f,IAAIkT,WAAa,EAAG,CAClClT,IAAIsY,KAAKr6B,MAIb,MAAO,CACLkmB,IAAKA,IACLnE,IAAKA,KAIT,GAAI/d,KAAKixB,WAAa,GAAKj1B,IAAIi1B,WAAa,EAAG,CAC7C5pB,IAAMrH,KAAK69B,OAAO7hC,IAAIujB,MAAOke,MAE7B,GAAIA,OAAS,MAAO,CAClBvb,IAAM7a,IAAI6a,IAAI3C,MAGhB,MAAO,CACL2C,IAAKA,IACLnE,IAAK1W,IAAI0W,KAIb,IAAK/d,KAAKixB,SAAWj1B,IAAIi1B,YAAc,EAAG,CACxC5pB,IAAMrH,KAAKuf,MAAMse,OAAO7hC,IAAIujB,MAAOke,MAEnC,GAAIA,OAAS,MAAO,CAClB1f,IAAM1W,IAAI0W,IAAIwB,MACd,GAAIue,UAAY/f,IAAIkT,WAAa,EAAG,CAClClT,IAAIuY,KAAKt6B,MAIb,MAAO,CACLkmB,IAAK7a,IAAI6a,IACTnE,IAAKA,KAOT,GAAI/hB,IAAId,OAAS8E,KAAK9E,QAAU8E,KAAKsxB,IAAIt1B,KAAO,EAAG,CACjD,MAAO,CACLkmB,IAAK,IAAI4O,GAAG,GACZ/S,IAAK/d,MAKT,GAAIhE,IAAId,SAAW,EAAG,CACpB,GAAIuiC,OAAS,MAAO,CAClB,MAAO,CACLvb,IAAKliB,KAAK+9B,KAAK/hC,IAAIk1B,MAAM,IACzBnT,IAAK,MAIT,GAAI0f,OAAS,MAAO,CAClB,MAAO,CACLvb,IAAK,KACLnE,IAAK,IAAI+S,GAAG9wB,KAAK0zB,MAAM13B,IAAIk1B,MAAM,MAIrC,MAAO,CACLhP,IAAKliB,KAAK+9B,KAAK/hC,IAAIk1B,MAAM,IACzBnT,IAAK,IAAI+S,GAAG9wB,KAAK0zB,MAAM13B,IAAIk1B,MAAM,MAIrC,OAAOlxB,KAAKw9B,SAASxhC,IAAKyhC,KAC3B,EAGD3M,GAAGnxB,UAAUuiB,IAAM,SAASA,IAAKlmB,KAC/B,OAAOgE,KAAK69B,OAAO7hC,IAAK,MAAO,OAAOkmB,GACvC,EAGD4O,GAAGnxB,UAAUoe,IAAM,SAASA,IAAK/hB,KAC/B,OAAOgE,KAAK69B,OAAO7hC,IAAK,MAAO,OAAO+hB,GACvC,EAED+S,GAAGnxB,UAAUq+B,KAAO,SAASA,KAAMhiC,KACjC,OAAOgE,KAAK69B,OAAO7hC,IAAK,MAAO,MAAM+hB,GACtC,EAGD+S,GAAGnxB,UAAUs+B,SAAW,SAASA,SAAUjiC,KACzC,IAAIkiC,GAAKl+B,KAAK69B,OAAO7hC,KAGrB,GAAIkiC,GAAGngB,IAAI0V,SAAU,OAAOyK,GAAGhc,IAE/B,IAAInE,IAAMmgB,GAAGhc,IAAI+O,WAAa,EAAIiN,GAAGngB,IAAIuY,KAAKt6B,KAAOkiC,GAAGngB,IAExD,IAAIogB,KAAOniC,IAAIghC,MAAM,GACrB,IAAIoB,GAAKpiC,IAAIqiC,MAAM,GACnB,IAAI/M,IAAMvT,IAAIuT,IAAI6M,MAGlB,GAAI7M,IAAM,GAAM8M,KAAO,GAAK9M,MAAQ,EAAI,OAAO4M,GAAGhc,IAGlD,OAAOgc,GAAGhc,IAAI+O,WAAa,EAAIiN,GAAGhc,IAAIib,MAAM,GAAKe,GAAGhc,IAAI8S,MAAM,EAC/D,EAEDlE,GAAGnxB,UAAU+zB,MAAQ,SAASA,MAAO13B,KACnC,IAAIigC,SAAWjgC,IAAM,EACrB,GAAIigC,SAAUjgC,KAAOA,IAErBw0B,OAAOx0B,KAAO,UACd,IAAI6kB,GAAK,GAAK,IAAM7kB,IAEpB,IAAIilB,IAAM,EACV,IAAK,IAAIjmB,EAAIgF,KAAK9E,OAAS,EAAGF,GAAK,EAAGA,IAAK,CACzCimB,KAAOJ,EAAII,KAAOjhB,KAAKkxB,MAAMl2B,GAAK,IAAMgB,IAG1C,OAAOigC,UAAYhb,IAAMA,GAC1B,EAGD6P,GAAGnxB,UAAU2+B,KAAO,SAASA,KAAMtiC,KACjC,OAAOgE,KAAK0zB,MAAM13B,IACnB,EAGD80B,GAAGnxB,UAAUg0B,MAAQ,SAASA,MAAO33B,KACnC,IAAIigC,SAAWjgC,IAAM,EACrB,GAAIigC,SAAUjgC,KAAOA,IAErBw0B,OAAOx0B,KAAO,UAEd,IAAIs3B,MAAQ,EACZ,IAAK,IAAIt4B,EAAIgF,KAAK9E,OAAS,EAAGF,GAAK,EAAGA,IAAK,CACzC,IAAI62B,GAAK7xB,KAAKkxB,MAAMl2B,GAAK,GAAKs4B,MAAQ,SACtCtzB,KAAKkxB,MAAMl2B,GAAM62B,EAAI71B,IAAO,EAC5Bs3B,MAAQzB,EAAI71B,IAGdgE,KAAK+xB,SACL,OAAOkK,SAAWj8B,KAAKo1B,OAASp1B,IACjC,EAED8wB,GAAGnxB,UAAUo+B,KAAO,SAASA,KAAM/hC,KACjC,OAAOgE,KAAK6R,QAAQ8hB,MAAM33B,IAC3B,EAED80B,GAAGnxB,UAAU4+B,KAAO,SAASA,KAAM1d,GACjC2P,OAAO3P,EAAEoQ,WAAa,GACtBT,QAAQ3P,EAAE4S,UAEV,IAAI1wB,EAAI/C,KACR,IAAIgD,EAAI6d,EAAEhP,QAEV,GAAI9O,EAAEkuB,WAAa,EAAG,CACpBluB,EAAIA,EAAEi7B,KAAKnd,EACjB,KAAW,CACL9d,EAAIA,EAAE8O,QAIR,IAAI2H,EAAI,IAAIsX,GAAG,GACf,IAAIpG,EAAI,IAAIoG,GAAG,GAGf,IAAInG,EAAI,IAAImG,GAAG,GACf,IAAIlG,EAAI,IAAIkG,GAAG,GAEf,IAAIrR,EAAI,EAER,MAAO1c,EAAEy7B,UAAYx7B,EAAEw7B,SAAU,CAC/Bz7B,EAAEy5B,OAAO,GACTx5B,EAAEw5B,OAAO,KACP/c,EAGJ,IAAIgf,GAAKz7B,EAAE6O,QACX,IAAI6sB,GAAK37B,EAAE8O,QAEX,OAAQ9O,EAAE0wB,SAAU,CAClB,IAAK,IAAIz4B,EAAI,EAAG2jC,GAAK,GAAI57B,EAAEmuB,MAAM,GAAKyN,MAAQ,GAAK3jC,EAAI,KAAMA,EAAG2jC,KAAO,GACvE,GAAI3jC,EAAI,EAAG,CACT+H,EAAEy5B,OAAOxhC,GACT,MAAOA,KAAM,EAAG,CACd,GAAIwe,EAAEuI,SAAW2I,EAAE3I,QAAS,CAC1BvI,EAAE6c,KAAKoI,IACP/T,EAAE4L,KAAKoI,IAGTllB,EAAEgjB,OAAO,GACT9R,EAAE8R,OAAO,IAIb,IAAK,IAAIt2B,EAAI,EAAG04B,GAAK,GAAI57B,EAAEkuB,MAAM,GAAK0N,MAAQ,GAAK14B,EAAI,KAAMA,EAAG04B,KAAO,GACvE,GAAI14B,EAAI,EAAG,CACTlD,EAAEw5B,OAAOt2B,GACT,MAAOA,KAAM,EAAG,CACd,GAAIykB,EAAE5I,SAAW6I,EAAE7I,QAAS,CAC1B4I,EAAE0L,KAAKoI,IACP7T,EAAE0L,KAAKoI,IAGT/T,EAAE6R,OAAO,GACT5R,EAAE4R,OAAO,IAIb,GAAIz5B,EAAEuuB,IAAItuB,IAAM,EAAG,CACjBD,EAAEuzB,KAAKtzB,GACPwW,EAAE8c,KAAK3L,GACPD,EAAE4L,KAAK1L,EACf,KAAa,CACL5nB,EAAEszB,KAAKvzB,GACP4nB,EAAE2L,KAAK9c,GACPoR,EAAE0L,KAAK5L,IAIX,MAAO,CACL5nB,EAAG6nB,EACHvpB,EAAGwpB,EACHnM,IAAKzb,EAAEo5B,OAAO3c,GAEjB,EAKDqR,GAAGnxB,UAAUk/B,OAAS,SAASA,OAAQhe,GACrC2P,OAAO3P,EAAEoQ,WAAa,GACtBT,QAAQ3P,EAAE4S,UAEV,IAAI3wB,EAAI9C,KACR,IAAIoB,EAAIyf,EAAEhP,QAEV,GAAI/O,EAAEmuB,WAAa,EAAG,CACpBnuB,EAAIA,EAAEk7B,KAAKnd,EACjB,KAAW,CACL/d,EAAIA,EAAE+O,QAGR,IAAIitB,GAAK,IAAIhO,GAAG,GAChB,IAAInC,GAAK,IAAImC,GAAG,GAEhB,IAAIiO,MAAQ39B,EAAEyQ,QAEd,MAAO/O,EAAEk8B,KAAK,GAAK,GAAK59B,EAAE49B,KAAK,GAAK,EAAG,CACrC,IAAK,IAAIhkC,EAAI,EAAG2jC,GAAK,GAAI77B,EAAEouB,MAAM,GAAKyN,MAAQ,GAAK3jC,EAAI,KAAMA,EAAG2jC,KAAO,GACvE,GAAI3jC,EAAI,EAAG,CACT8H,EAAE05B,OAAOxhC,GACT,MAAOA,KAAM,EAAG,CACd,GAAI8jC,GAAG/c,QAAS,CACd+c,GAAGzI,KAAK0I,OAGVD,GAAGtC,OAAO,IAId,IAAK,IAAIt2B,EAAI,EAAG04B,GAAK,GAAIx9B,EAAE8vB,MAAM,GAAK0N,MAAQ,GAAK14B,EAAI,KAAMA,EAAG04B,KAAO,GACvE,GAAI14B,EAAI,EAAG,CACT9E,EAAEo7B,OAAOt2B,GACT,MAAOA,KAAM,EAAG,CACd,GAAIyoB,GAAG5M,QAAS,CACd4M,GAAG0H,KAAK0I,OAGVpQ,GAAG6N,OAAO,IAId,GAAI15B,EAAEwuB,IAAIlwB,IAAM,EAAG,CACjB0B,EAAEwzB,KAAKl1B,GACP09B,GAAGxI,KAAK3H,GAChB,KAAa,CACLvtB,EAAEk1B,KAAKxzB,GACP6rB,GAAG2H,KAAKwI,KAIZ,IAAIz3B,IACJ,GAAIvE,EAAEk8B,KAAK,KAAO,EAAG,CACnB33B,IAAMy3B,EACZ,KAAW,CACLz3B,IAAMsnB,GAGR,GAAItnB,IAAI23B,KAAK,GAAK,EAAG,CACnB33B,IAAIgvB,KAAKxV,GAGX,OAAOxZ,GACR,EAEDypB,GAAGnxB,UAAU8e,IAAM,SAASA,IAAKziB,KAC/B,GAAIgE,KAAKyzB,SAAU,OAAOz3B,IAAImC,MAC9B,GAAInC,IAAIy3B,SAAU,OAAOzzB,KAAK7B,MAE9B,IAAI2E,EAAI9C,KAAK6R,QACb,IAAIzQ,EAAIpF,IAAI6V,QACZ/O,EAAEmuB,SAAW,EACb7vB,EAAE6vB,SAAW,EAGb,IAAK,IAAI9f,MAAQ,EAAGrO,EAAE07B,UAAYp9B,EAAEo9B,SAAUrtB,QAAS,CACrDrO,EAAE05B,OAAO,GACTp7B,EAAEo7B,OAAO,GAGX,EAAG,CACD,MAAO15B,EAAE07B,SAAU,CACjB17B,EAAE05B,OAAO,GAEX,MAAOp7B,EAAEo9B,SAAU,CACjBp9B,EAAEo7B,OAAO,GAGX,IAAIhe,EAAI1b,EAAEwuB,IAAIlwB,GACd,GAAIod,EAAI,EAAG,CAET,IAAI+V,EAAIzxB,EACRA,EAAI1B,EACJA,EAAImzB,CACZ,MAAa,GAAI/V,IAAM,GAAKpd,EAAE49B,KAAK,KAAO,EAAG,CACrC,MAGFl8B,EAAEwzB,KAAKl1B,SACA,MAET,OAAOA,EAAEg7B,OAAOjrB,MACjB,EAGD2f,GAAGnxB,UAAUs/B,KAAO,SAASA,KAAMjjC,KACjC,OAAOgE,KAAKu+B,KAAKviC,KAAK8G,EAAEk7B,KAAKhiC,IAC9B,EAED80B,GAAGnxB,UAAU6+B,OAAS,SAASA,SAC7B,OAAQx+B,KAAKkxB,MAAM,GAAK,KAAO,CAChC,EAEDJ,GAAGnxB,UAAUoiB,MAAQ,SAASA,QAC5B,OAAQ/hB,KAAKkxB,MAAM,GAAK,KAAO,CAChC,EAGDJ,GAAGnxB,UAAU0+B,MAAQ,SAASA,MAAOriC,KACnC,OAAOgE,KAAKkxB,MAAM,GAAKl1B,GACxB,EAGD80B,GAAGnxB,UAAUu/B,MAAQ,SAASA,MAAOxK,KACnClE,cAAckE,MAAQ,UACtB,IAAIlW,EAAIkW,IAAM,GACd,IAAIh3B,GAAKg3B,IAAMlW,GAAK,GACpB,IAAID,EAAI,GAAKC,EAGb,GAAIxe,KAAK9E,QAAUwC,EAAG,CACpBsC,KAAK8yB,QAAQp1B,EAAI,GACjBsC,KAAKkxB,MAAMxzB,IAAM6gB,EACjB,OAAOve,KAIT,IAAIszB,MAAQ/U,EACZ,IAAK,IAAIvjB,EAAI0C,EAAG41B,QAAU,GAAKt4B,EAAIgF,KAAK9E,OAAQF,IAAK,CACnD,IAAI62B,EAAI7xB,KAAKkxB,MAAMl2B,GAAK,EACxB62B,GAAKyB,MACLA,MAAQzB,IAAM,GACdA,GAAK,SACL7xB,KAAKkxB,MAAMl2B,GAAK62B,EAElB,GAAIyB,QAAU,EAAG,CACftzB,KAAKkxB,MAAMl2B,GAAKs4B,MAChBtzB,KAAK9E,SAEP,OAAO8E,IACR,EAED8wB,GAAGnxB,UAAU8zB,OAAS,SAASA,SAC7B,OAAOzzB,KAAK9E,SAAW,GAAK8E,KAAKkxB,MAAM,KAAO,CAC/C,EAEDJ,GAAGnxB,UAAUq/B,KAAO,SAASA,KAAMhjC,KACjC,IAAIi1B,SAAWj1B,IAAM,EAErB,GAAIgE,KAAKixB,WAAa,IAAMA,SAAU,OAAQ,EAC9C,GAAIjxB,KAAKixB,WAAa,GAAKA,SAAU,OAAO,EAE5CjxB,KAAK+xB,SAEL,IAAI1qB,IACJ,GAAIrH,KAAK9E,OAAS,EAAG,CACnBmM,IAAM,CACZ,KAAW,CACL,GAAI4pB,SAAU,CACZj1B,KAAOA,IAGTw0B,OAAOx0B,KAAO,SAAW,qBAEzB,IAAI61B,EAAI7xB,KAAKkxB,MAAM,GAAK,EACxB7pB,IAAMwqB,IAAM71B,IAAM,EAAI61B,EAAI71B,KAAO,EAAI,EAEvC,GAAIgE,KAAKixB,WAAa,EAAG,OAAQ5pB,IAAM,EACvC,OAAOA,GACR,EAMDypB,GAAGnxB,UAAU2xB,IAAM,SAASA,IAAKt1B,KAC/B,GAAIgE,KAAKixB,WAAa,GAAKj1B,IAAIi1B,WAAa,EAAG,OAAQ,EACvD,GAAIjxB,KAAKixB,WAAa,GAAKj1B,IAAIi1B,WAAa,EAAG,OAAO,EAEtD,IAAI5pB,IAAMrH,KAAKm/B,KAAKnjC,KACpB,GAAIgE,KAAKixB,WAAa,EAAG,OAAQ5pB,IAAM,EACvC,OAAOA,GACR,EAGDypB,GAAGnxB,UAAUw/B,KAAO,SAASA,KAAMnjC,KAEjC,GAAIgE,KAAK9E,OAASc,IAAId,OAAQ,OAAO,EACrC,GAAI8E,KAAK9E,OAASc,IAAId,OAAQ,OAAQ,EAEtC,IAAImM,IAAM,EACV,IAAK,IAAIrM,EAAIgF,KAAK9E,OAAS,EAAGF,GAAK,EAAGA,IAAK,CACzC,IAAI8H,EAAI9C,KAAKkxB,MAAMl2B,GAAK,EACxB,IAAIoG,EAAIpF,IAAIk1B,MAAMl2B,GAAK,EAEvB,GAAI8H,IAAM1B,EAAG,SACb,GAAI0B,EAAI1B,EAAG,CACTiG,KAAO,CACf,MAAa,GAAIvE,EAAI1B,EAAG,CAChBiG,IAAM,EAER,MAEF,OAAOA,GACR,EAEDypB,GAAGnxB,UAAUy/B,IAAM,SAASA,IAAKpjC,KAC/B,OAAOgE,KAAKg/B,KAAKhjC,OAAS,CAC3B,EAED80B,GAAGnxB,UAAU0/B,GAAK,SAASA,GAAIrjC,KAC7B,OAAOgE,KAAKsxB,IAAIt1B,OAAS,CAC1B,EAED80B,GAAGnxB,UAAU2/B,KAAO,SAASA,KAAMtjC,KACjC,OAAOgE,KAAKg/B,KAAKhjC,MAAQ,CAC1B,EAED80B,GAAGnxB,UAAU4/B,IAAM,SAASA,IAAKvjC,KAC/B,OAAOgE,KAAKsxB,IAAIt1B,MAAQ,CACzB,EAED80B,GAAGnxB,UAAU6/B,IAAM,SAASA,IAAKxjC,KAC/B,OAAOgE,KAAKg/B,KAAKhjC,QAAU,CAC5B,EAED80B,GAAGnxB,UAAU8/B,GAAK,SAASA,GAAIzjC,KAC7B,OAAOgE,KAAKsxB,IAAIt1B,QAAU,CAC3B,EAED80B,GAAGnxB,UAAU+/B,KAAO,SAASA,KAAM1jC,KACjC,OAAOgE,KAAKg/B,KAAKhjC,MAAQ,CAC1B,EAED80B,GAAGnxB,UAAUggC,IAAM,SAASA,IAAK3jC,KAC/B,OAAOgE,KAAKsxB,IAAIt1B,MAAQ,CACzB,EAED80B,GAAGnxB,UAAUigC,IAAM,SAASA,IAAK5jC,KAC/B,OAAOgE,KAAKg/B,KAAKhjC,OAAS,CAC3B,EAED80B,GAAGnxB,UAAUkgC,GAAK,SAASA,GAAI7jC,KAC7B,OAAOgE,KAAKsxB,IAAIt1B,OAAS,CAC1B,EAMD80B,GAAGK,IAAM,SAASA,IAAKn1B,KACrB,OAAO,IAAI8jC,IAAI9jC,IAChB,EAED80B,GAAGnxB,UAAUogC,MAAQ,SAASA,MAAOjY,KACnC0I,QAAQxwB,KAAKmxB,IAAK,yCAClBX,OAAOxwB,KAAKixB,WAAa,EAAG,iCAC5B,OAAOnJ,IAAIkY,UAAUhgC,MAAMigC,UAAUnY,IACtC,EAEDgJ,GAAGnxB,UAAUugC,QAAU,SAASA,UAC9B1P,OAAOxwB,KAAKmxB,IAAK,wDACjB,OAAOnxB,KAAKmxB,IAAIgP,YAAYngC,KAC7B,EAED8wB,GAAGnxB,UAAUsgC,UAAY,SAASA,UAAWnY,KAC3C9nB,KAAKmxB,IAAMrJ,IACX,OAAO9nB,IACR,EAED8wB,GAAGnxB,UAAUygC,SAAW,SAASA,SAAUtY,KACzC0I,QAAQxwB,KAAKmxB,IAAK,yCAClB,OAAOnxB,KAAKigC,UAAUnY,IACvB,EAEDgJ,GAAGnxB,UAAU0gC,OAAS,SAASA,OAAQrkC,KACrCw0B,OAAOxwB,KAAKmxB,IAAK,sCACjB,OAAOnxB,KAAKmxB,IAAIhc,IAAInV,KAAMhE,IAC3B,EAED80B,GAAGnxB,UAAU2gC,QAAU,SAASA,QAAStkC,KACvCw0B,OAAOxwB,KAAKmxB,IAAK,uCACjB,OAAOnxB,KAAKmxB,IAAIkF,KAAKr2B,KAAMhE,IAC5B,EAED80B,GAAGnxB,UAAU4gC,OAAS,SAASA,OAAQvkC,KACrCw0B,OAAOxwB,KAAKmxB,IAAK,sCACjB,OAAOnxB,KAAKmxB,IAAI7kB,IAAItM,KAAMhE,IAC3B,EAED80B,GAAGnxB,UAAU6gC,QAAU,SAASA,QAASxkC,KACvCw0B,OAAOxwB,KAAKmxB,IAAK,uCACjB,OAAOnxB,KAAKmxB,IAAImF,KAAKt2B,KAAMhE,IAC5B,EAED80B,GAAGnxB,UAAU8gC,OAAS,SAASA,OAAQzkC,KACrCw0B,OAAOxwB,KAAKmxB,IAAK,sCACjB,OAAOnxB,KAAKmxB,IAAIuP,IAAI1gC,KAAMhE,IAC3B,EAED80B,GAAGnxB,UAAUghC,OAAS,SAASA,OAAQ3kC,KACrCw0B,OAAOxwB,KAAKmxB,IAAK,sCACjBnxB,KAAKmxB,IAAIyP,SAAS5gC,KAAMhE,KACxB,OAAOgE,KAAKmxB,IAAIvoB,IAAI5I,KAAMhE,IAC3B,EAED80B,GAAGnxB,UAAUkhC,QAAU,SAASA,QAAS7kC,KACvCw0B,OAAOxwB,KAAKmxB,IAAK,sCACjBnxB,KAAKmxB,IAAIyP,SAAS5gC,KAAMhE,KACxB,OAAOgE,KAAKmxB,IAAIqJ,KAAKx6B,KAAMhE,IAC5B,EAED80B,GAAGnxB,UAAUmhC,OAAS,SAASA,SAC7BtQ,OAAOxwB,KAAKmxB,IAAK,sCACjBnxB,KAAKmxB,IAAI4P,SAAS/gC,MAClB,OAAOA,KAAKmxB,IAAI/R,IAAIpf,KACrB,EAED8wB,GAAGnxB,UAAUqhC,QAAU,SAASA,UAC9BxQ,OAAOxwB,KAAKmxB,IAAK,uCACjBnxB,KAAKmxB,IAAI4P,SAAS/gC,MAClB,OAAOA,KAAKmxB,IAAIgL,KAAKn8B,KACtB,EAGD8wB,GAAGnxB,UAAUshC,QAAU,SAASA,UAC9BzQ,OAAOxwB,KAAKmxB,IAAK,uCACjBnxB,KAAKmxB,IAAI4P,SAAS/gC,MAClB,OAAOA,KAAKmxB,IAAI5O,KAAKviB,KACtB,EAED8wB,GAAGnxB,UAAUuhC,QAAU,SAASA,UAC9B1Q,OAAOxwB,KAAKmxB,IAAK,uCACjBnxB,KAAKmxB,IAAI4P,SAAS/gC,MAClB,OAAOA,KAAKmxB,IAAI8N,KAAKj/B,KACtB,EAGD8wB,GAAGnxB,UAAUwhC,OAAS,SAASA,SAC7B3Q,OAAOxwB,KAAKmxB,IAAK,sCACjBnxB,KAAKmxB,IAAI4P,SAAS/gC,MAClB,OAAOA,KAAKmxB,IAAI5R,IAAIvf,KACrB,EAED8wB,GAAGnxB,UAAUyhC,OAAS,SAASA,OAAQplC,KACrCw0B,OAAOxwB,KAAKmxB,MAAQn1B,IAAIm1B,IAAK,qBAC7BnxB,KAAKmxB,IAAI4P,SAAS/gC,MAClB,OAAOA,KAAKmxB,IAAIrzB,IAAIkC,KAAMhE,IAC3B,EAGD,IAAIqlC,OAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,OAAQvzB,KAAM0S,GAErB7gB,KAAKmO,KAAOA,KACZnO,KAAK6gB,EAAI,IAAIiQ,GAAGjQ,EAAG,IACnB7gB,KAAKsE,EAAItE,KAAK6gB,EAAEgC,YAChB7iB,KAAK4b,EAAI,IAAIkV,GAAG,GAAGsL,OAAOp8B,KAAKsE,GAAGgyB,KAAKt2B,KAAK6gB,GAE5C7gB,KAAKpE,IAAMoE,KAAK2hC,OAGlBD,OAAO/hC,UAAUgiC,KAAO,SAASA,OAC/B,IAAI/lC,IAAM,IAAIk1B,GAAG,MACjBl1B,IAAIs1B,MAAQ,IAAIp2B,MAAM+C,KAAK6jB,KAAK1hB,KAAKsE,EAAI,KACzC,OAAO1I,GACR,EAED8lC,OAAO/hC,UAAUiiC,QAAU,SAASA,QAAS5lC,KAG3C,IAAIwiB,EAAIxiB,IACR,IAAI6lC,KAEJ,EAAG,CACD7hC,KAAKkP,MAAMsP,EAAGxe,KAAKpE,KACnB4iB,EAAIxe,KAAK8hC,MAAMtjB,GACfA,EAAIA,EAAE6X,KAAKr2B,KAAKpE,KAChBimC,KAAOrjB,EAAEqE,WACf,OAAagf,KAAO7hC,KAAKsE,GAErB,IAAIgtB,IAAMuQ,KAAO7hC,KAAKsE,GAAK,EAAIka,EAAE2gB,KAAKn/B,KAAK6gB,GAC3C,GAAIyQ,MAAQ,EAAG,CACb9S,EAAE0S,MAAM,GAAK,EACb1S,EAAEtjB,OAAS,CACjB,MAAW,GAAIo2B,IAAM,EAAG,CAClB9S,EAAE8X,KAAKt2B,KAAK6gB,EAClB,KAAW,CACL,GAAIrC,EAAEuU,QAAU9yB,UAAW,CAEzBue,EAAEuU,OACV,KAAa,CAELvU,EAAEuT,UAIN,OAAOvT,CACR,EAEDkjB,OAAO/hC,UAAUuP,MAAQ,SAASA,MAAOX,MAAOrG,KAC9CqG,MAAMiuB,OAAOx8B,KAAKsE,EAAG,EAAG4D,IACzB,EAEDw5B,OAAO/hC,UAAUmiC,MAAQ,SAASA,MAAO9lC,KACvC,OAAOA,IAAIw+B,KAAKx6B,KAAK4b,EACtB,EAED,SAASmmB,OACPL,OAAOl+B,KACLxD,KACA,OACA,2EAEJywB,SAASsR,KAAML,QAEfK,KAAKpiC,UAAUuP,MAAQ,SAASA,MAAOX,MAAOlS,QAE5C,IAAI0oB,KAAO,QAEX,IAAItR,OAAS5V,KAAKoF,IAAIsL,MAAMrT,OAAQ,GACpC,IAAK,IAAIF,EAAI,EAAGA,EAAIyY,OAAQzY,IAAK,CAC/BqB,OAAO60B,MAAMl2B,GAAKuT,MAAM2iB,MAAMl2B,GAEhCqB,OAAOnB,OAASuY,OAEhB,GAAIlF,MAAMrT,QAAU,EAAG,CACrBqT,MAAM2iB,MAAM,GAAK,EACjB3iB,MAAMrT,OAAS,EACf,OAIF,IAAI4qB,KAAOvX,MAAM2iB,MAAM,GACvB70B,OAAO60B,MAAM70B,OAAOnB,UAAY4qB,KAAOf,KAEvC,IAAK/pB,EAAI,GAAIA,EAAIuT,MAAMrT,OAAQF,IAAK,CAClC,IAAIgnC,KAAOzzB,MAAM2iB,MAAMl2B,GAAK,EAC5BuT,MAAM2iB,MAAMl2B,EAAI,KAAQgnC,KAAOjd,OAAS,EAAMe,OAAS,GACvDA,KAAOkc,KAETlc,QAAU,GACVvX,MAAM2iB,MAAMl2B,EAAI,IAAM8qB,KACtB,GAAIA,OAAS,GAAKvX,MAAMrT,OAAS,GAAI,CACnCqT,MAAMrT,QAAU,EACtB,KAAW,CACLqT,MAAMrT,QAAU,EAEnB,EAED6mC,KAAKpiC,UAAUmiC,MAAQ,SAASA,MAAO9lC,KAErCA,IAAIk1B,MAAMl1B,IAAId,QAAU,EACxBc,IAAIk1B,MAAMl1B,IAAId,OAAS,GAAK,EAC5Bc,IAAId,QAAU,EAGd,IAAI4O,GAAK,EACT,IAAK,IAAI9O,EAAI,EAAGA,EAAIgB,IAAId,OAAQF,IAAK,CACnC,IAAI62B,EAAI71B,IAAIk1B,MAAMl2B,GAAK,EACvB8O,IAAM+nB,EAAI,IACV71B,IAAIk1B,MAAMl2B,GAAK8O,GAAK,SACpBA,GAAK+nB,EAAI,IAAS/nB,GAAK,SAAa,GAItC,GAAI9N,IAAIk1B,MAAMl1B,IAAId,OAAS,KAAO,EAAG,CACnCc,IAAId,SACJ,GAAIc,IAAIk1B,MAAMl1B,IAAId,OAAS,KAAO,EAAG,CACnCc,IAAId,UAGR,OAAOc,GACR,EAED,SAASimC,OACPP,OAAOl+B,KACLxD,KACA,OACA,kEAEJywB,SAASwR,KAAMP,QAEf,SAASQ,OACPR,OAAOl+B,KACLxD,KACA,OACA,yDAEJywB,SAASyR,KAAMR,QAEf,SAASS,SAEPT,OAAOl+B,KACLxD,KACA,QACA,uEAEJywB,SAAS0R,OAAQT,QAEjBS,OAAOxiC,UAAUmiC,MAAQ,SAASA,MAAO9lC,KAEvC,IAAIs3B,MAAQ,EACZ,IAAK,IAAIt4B,EAAI,EAAGA,EAAIgB,IAAId,OAAQF,IAAK,CACnC,IAAI+O,IAAM/N,IAAIk1B,MAAMl2B,GAAK,GAAK,GAAOs4B,MACrC,IAAIxpB,GAAKC,GAAK,SACdA,MAAQ,GAER/N,IAAIk1B,MAAMl2B,GAAK8O,GACfwpB,MAAQvpB,GAEV,GAAIupB,QAAU,EAAG,CACft3B,IAAIk1B,MAAMl1B,IAAId,UAAYo4B,MAE5B,OAAOt3B,GACR,EAGD80B,GAAGsR,OAAS,SAASC,MAAOl0B,MAE1B,GAAIkzB,OAAOlzB,MAAO,OAAOkzB,OAAOlzB,MAEhC,IAAIk0B,MACJ,GAAIl0B,OAAS,OAAQ,CACnBk0B,MAAQ,IAAIN,IAClB,MAAW,GAAI5zB,OAAS,OAAQ,CAC1Bk0B,MAAQ,IAAIJ,IAClB,MAAW,GAAI9zB,OAAS,OAAQ,CAC1Bk0B,MAAQ,IAAIH,IAClB,MAAW,GAAI/zB,OAAS,SAAU,CAC5Bk0B,MAAQ,IAAIF,MAClB,KAAW,CACL,MAAM,IAAI7mC,MAAM,iBAAmB6S,MAErCkzB,OAAOlzB,MAAQk0B,MAEf,OAAOA,KACR,EAKD,SAASvC,IAAK1iC,GACZ,UAAWA,IAAM,SAAU,CACzB,IAAIilC,MAAQvR,GAAGsR,OAAOhlC,GACtB4C,KAAK5C,EAAIilC,MAAMxhB,EACf7gB,KAAKqiC,MAAQA,KACnB,KAAW,CACL7R,OAAOpzB,EAAEgiC,IAAI,GAAI,kCACjBp/B,KAAK5C,EAAIA,EACT4C,KAAKqiC,MAAQ,MAIjBvC,IAAIngC,UAAUohC,SAAW,SAASA,SAAUj+B,GAC1C0tB,OAAO1tB,EAAEmuB,WAAa,EAAG,iCACzBT,OAAO1tB,EAAEquB,IAAK,kCACf,EAED2O,IAAIngC,UAAUihC,SAAW,SAASA,SAAU99B,EAAG1B,GAC7CovB,QAAQ1tB,EAAEmuB,SAAW7vB,EAAE6vB,YAAc,EAAG,iCACxCT,OAAO1tB,EAAEquB,KAAOruB,EAAEquB,MAAQ/vB,EAAE+vB,IAC1B,kCACH,EAED2O,IAAIngC,UAAU2iC,KAAO,SAASA,KAAMx/B,GAClC,GAAI9C,KAAKqiC,MAAO,OAAOriC,KAAKqiC,MAAMT,QAAQ9+B,GAAGm9B,UAAUjgC,MAEvD4yB,KAAK9vB,EAAGA,EAAEk7B,KAAKh+B,KAAK5C,GAAG6iC,UAAUjgC,OACjC,OAAO8C,CACR,EAEDg9B,IAAIngC,UAAU4f,IAAM,SAASA,IAAKzc,GAChC,GAAIA,EAAE2wB,SAAU,CACd,OAAO3wB,EAAE+O,QAGX,OAAO7R,KAAK5C,EAAEkP,IAAIxJ,GAAGm9B,UAAUjgC,KAChC,EAED8/B,IAAIngC,UAAUwV,IAAM,SAASA,IAAKrS,EAAG1B,GACnCpB,KAAK4gC,SAAS99B,EAAG1B,GAEjB,IAAIiG,IAAMvE,EAAEqS,IAAI/T,GAChB,GAAIiG,IAAIiqB,IAAItxB,KAAK5C,IAAM,EAAG,CACxBiK,IAAIivB,KAAKt2B,KAAK5C,GAEhB,OAAOiK,IAAI44B,UAAUjgC,KACtB,EAED8/B,IAAIngC,UAAU02B,KAAO,SAASA,KAAMvzB,EAAG1B,GACrCpB,KAAK4gC,SAAS99B,EAAG1B,GAEjB,IAAIiG,IAAMvE,EAAEuzB,KAAKj1B,GACjB,GAAIiG,IAAIiqB,IAAItxB,KAAK5C,IAAM,EAAG,CACxBiK,IAAIivB,KAAKt2B,KAAK5C,GAEhB,OAAOiK,GACR,EAEDy4B,IAAIngC,UAAU2M,IAAM,SAASA,IAAKxJ,EAAG1B,GACnCpB,KAAK4gC,SAAS99B,EAAG1B,GAEjB,IAAIiG,IAAMvE,EAAEwJ,IAAIlL,GAChB,GAAIiG,IAAI23B,KAAK,GAAK,EAAG,CACnB33B,IAAIgvB,KAAKr2B,KAAK5C,GAEhB,OAAOiK,IAAI44B,UAAUjgC,KACtB,EAED8/B,IAAIngC,UAAU22B,KAAO,SAASA,KAAMxzB,EAAG1B,GACrCpB,KAAK4gC,SAAS99B,EAAG1B,GAEjB,IAAIiG,IAAMvE,EAAEwzB,KAAKl1B,GACjB,GAAIiG,IAAI23B,KAAK,GAAK,EAAG,CACnB33B,IAAIgvB,KAAKr2B,KAAK5C,GAEhB,OAAOiK,GACR,EAEDy4B,IAAIngC,UAAU+gC,IAAM,SAASA,IAAK59B,EAAG9G,KACnCgE,KAAK+gC,SAASj+B,GACd,OAAO9C,KAAKsiC,KAAKx/B,EAAEg6B,MAAM9gC,KAC1B,EAED8jC,IAAIngC,UAAU66B,KAAO,SAASA,KAAM13B,EAAG1B,GACrCpB,KAAK4gC,SAAS99B,EAAG1B,GACjB,OAAOpB,KAAKsiC,KAAKx/B,EAAE03B,KAAKp5B,GACzB,EAED0+B,IAAIngC,UAAUiJ,IAAM,SAASA,IAAK9F,EAAG1B,GACnCpB,KAAK4gC,SAAS99B,EAAG1B,GACjB,OAAOpB,KAAKsiC,KAAKx/B,EAAE8F,IAAIxH,GACxB,EAED0+B,IAAIngC,UAAUw8B,KAAO,SAASA,KAAMr5B,GAClC,OAAO9C,KAAKw6B,KAAK13B,EAAGA,EAAE+O,QACvB,EAEDiuB,IAAIngC,UAAUyf,IAAM,SAASA,IAAKtc,GAChC,OAAO9C,KAAK4I,IAAI9F,EAAGA,EACpB,EAEDg9B,IAAIngC,UAAU4iB,KAAO,SAASA,KAAMzf,GAClC,GAAIA,EAAE2wB,SAAU,OAAO3wB,EAAE+O,QAEzB,IAAI0wB,KAAOviC,KAAK5C,EAAEihC,MAAM,GACxB7N,OAAO+R,KAAO,IAAM,GAGpB,GAAIA,OAAS,EAAG,CACd,IAAIzkC,IAAMkC,KAAK5C,EAAE+X,IAAI,IAAI2b,GAAG,IAAI0L,OAAO,GACvC,OAAOx8B,KAAKlC,IAAIgF,EAAGhF,KAMrB,IAAIygB,EAAIve,KAAK5C,EAAEigC,KAAK,GACpB,IAAI3/B,EAAI,EACR,OAAQ6gB,EAAEkV,UAAYlV,EAAE8f,MAAM,KAAO,EAAG,CACtC3gC,IACA6gB,EAAEie,OAAO,GAEXhM,QAAQjS,EAAEkV,UAEV,IAAI+O,IAAM,IAAI1R,GAAG,GAAGiP,MAAM//B,MAC1B,IAAIyiC,KAAOD,IAAIrB,SAIf,IAAIuB,KAAO1iC,KAAK5C,EAAEigC,KAAK,GAAGb,OAAO,GACjC,IAAI9T,EAAI1oB,KAAK5C,EAAEylB,YACf6F,EAAI,IAAIoI,GAAG,EAAIpI,EAAIA,GAAGqX,MAAM//B,MAE5B,MAAOA,KAAKlC,IAAI4qB,EAAGga,MAAMpR,IAAImR,QAAU,EAAG,CACxC/Z,EAAE4X,QAAQmC,MAGZ,IAAIxkC,EAAI+B,KAAKlC,IAAI4qB,EAAGnK,GACpB,IAAIC,EAAIxe,KAAKlC,IAAIgF,EAAGyb,EAAE6e,KAAK,GAAGZ,OAAO,IACrC,IAAIjI,EAAIv0B,KAAKlC,IAAIgF,EAAGyb,GACpB,IAAInhB,EAAIM,EACR,MAAO62B,EAAEjD,IAAIkR,OAAS,EAAG,CACvB,IAAI5mC,IAAM24B,EACV,IAAK,IAAIv5B,EAAI,EAAGY,IAAI01B,IAAIkR,OAAS,EAAGxnC,IAAK,CACvCY,IAAMA,IAAIklC,SAEZtQ,OAAOx1B,EAAIoC,GACX,IAAIgE,EAAIpB,KAAKlC,IAAIG,EAAG,IAAI6yB,GAAG,GAAGsL,OAAOh/B,EAAIpC,EAAI,IAE7CwjB,EAAIA,EAAEmiB,OAAOv/B,GACbnD,EAAImD,EAAE0/B,SACNvM,EAAIA,EAAEoM,OAAO1iC,GACbb,EAAIpC,EAGN,OAAOwjB,CACR,EAEDshB,IAAIngC,UAAUs/B,KAAO,SAASA,KAAMn8B,GAClC,IAAIse,IAAMte,EAAE+7B,OAAO7+B,KAAK5C,GACxB,GAAIgkB,IAAI6P,WAAa,EAAG,CACtB7P,IAAI6P,SAAW,EACf,OAAOjxB,KAAKsiC,KAAKlhB,KAAK+f,QAC5B,KAAW,CACL,OAAOnhC,KAAKsiC,KAAKlhB,KAEpB,EAED0e,IAAIngC,UAAU7B,IAAM,SAASA,IAAKgF,EAAG9G,KACnC,GAAIA,IAAIy3B,SAAU,OAAO,IAAI3C,GAAG,GAAGiP,MAAM//B,MACzC,GAAIhE,IAAIgjC,KAAK,KAAO,EAAG,OAAOl8B,EAAE+O,QAEhC,IAAI+R,WAAa,EACjB,IAAI+e,IAAM,IAAI7nC,MAAM,GAAK8oB,YACzB+e,IAAI,GAAK,IAAI7R,GAAG,GAAGiP,MAAM//B,MACzB2iC,IAAI,GAAK7/B,EACT,IAAK,IAAI9H,EAAI,EAAGA,EAAI2nC,IAAIznC,OAAQF,IAAK,CACnC2nC,IAAI3nC,GAAKgF,KAAK4I,IAAI+5B,IAAI3nC,EAAI,GAAI8H,GAGhC,IAAIuE,IAAMs7B,IAAI,GACd,IAAIC,QAAU,EACd,IAAIC,WAAa,EACjB,IAAI1mC,MAAQH,IAAI6mB,YAAc,GAC9B,GAAI1mB,QAAU,EAAG,CACfA,MAAQ,GAGV,IAAKnB,EAAIgB,IAAId,OAAS,EAAGF,GAAK,EAAGA,IAAK,CACpC,IAAIkW,KAAOlV,IAAIk1B,MAAMl2B,GACrB,IAAK,IAAIkL,EAAI/J,MAAQ,EAAG+J,GAAK,EAAGA,IAAK,CACnC,IAAIwuB,IAAOxjB,MAAQhL,EAAK,EACxB,GAAImB,MAAQs7B,IAAI,GAAI,CAClBt7B,IAAMrH,KAAKof,IAAI/X,KAGjB,GAAIqtB,MAAQ,GAAKkO,UAAY,EAAG,CAC9BC,WAAa,EACb,SAGFD,UAAY,EACZA,SAAWlO,IACXmO,aACA,GAAIA,aAAejf,aAAe5oB,IAAM,GAAKkL,IAAM,GAAI,SAEvDmB,IAAMrH,KAAK4I,IAAIvB,IAAKs7B,IAAIC,UACxBC,WAAa,EACbD,QAAU,EAEZzmC,MAAQ,GAGV,OAAOkL,GACR,EAEDy4B,IAAIngC,UAAUqgC,UAAY,SAASA,UAAWhkC,KAC5C,IAAIwiB,EAAIxiB,IAAIgiC,KAAKh+B,KAAK5C,GAEtB,OAAOohB,IAAMxiB,IAAMwiB,EAAE3M,QAAU2M,CAChC,EAEDshB,IAAIngC,UAAUwgC,YAAc,SAASA,YAAankC,KAChD,IAAIqL,IAAMrL,IAAI6V,QACdxK,IAAI8pB,IAAM,KACV,OAAO9pB,GACR,EAMDypB,GAAGgS,KAAO,SAASA,KAAM9mC,KACvB,OAAO,IAAI+mC,KAAK/mC,IACjB,EAED,SAAS+mC,KAAM3lC,GACb0iC,IAAIt8B,KAAKxD,KAAM5C,GAEf4C,KAAKmR,MAAQnR,KAAK5C,EAAEylB,YACpB,GAAI7iB,KAAKmR,MAAQ,KAAO,EAAG,CACzBnR,KAAKmR,OAAS,GAAMnR,KAAKmR,MAAQ,GAGnCnR,KAAKwe,EAAI,IAAIsS,GAAG,GAAGsL,OAAOp8B,KAAKmR,OAC/BnR,KAAKo+B,GAAKp+B,KAAKsiC,KAAKtiC,KAAKwe,EAAEY,OAC3Bpf,KAAKgjC,KAAOhjC,KAAKwe,EAAEqgB,OAAO7+B,KAAK5C,GAE/B4C,KAAKijC,KAAOjjC,KAAKgjC,KAAKp6B,IAAI5I,KAAKwe,GAAG2e,MAAM,GAAGjb,IAAIliB,KAAK5C,GACpD4C,KAAKijC,KAAOjjC,KAAKijC,KAAKjF,KAAKh+B,KAAKwe,GAChCxe,KAAKijC,KAAOjjC,KAAKwe,EAAElS,IAAItM,KAAKijC,MAE9BxS,SAASsS,KAAMjD,KAEfiD,KAAKpjC,UAAUqgC,UAAY,SAASA,UAAWhkC,KAC7C,OAAOgE,KAAKsiC,KAAKtmC,IAAI8gC,MAAM98B,KAAKmR,OACjC,EAED4xB,KAAKpjC,UAAUwgC,YAAc,SAASA,YAAankC,KACjD,IAAIwiB,EAAIxe,KAAKsiC,KAAKtmC,IAAI4M,IAAI5I,KAAKgjC,OAC/BxkB,EAAE2S,IAAM,KACR,OAAO3S,CACR,EAEDukB,KAAKpjC,UAAU66B,KAAO,SAASA,KAAM13B,EAAG1B,GACtC,GAAI0B,EAAE2wB,UAAYryB,EAAEqyB,SAAU,CAC5B3wB,EAAEouB,MAAM,GAAK,EACbpuB,EAAE5H,OAAS,EACX,OAAO4H,EAGT,IAAIyxB,EAAIzxB,EAAE03B,KAAKp5B,GACf,IAAInD,EAAIs2B,EAAE2I,MAAMl9B,KAAKmR,OAAOvI,IAAI5I,KAAKijC,MAAMhG,OAAOj9B,KAAKmR,OAAOvI,IAAI5I,KAAK5C,GACvE,IAAIkhB,EAAIiW,EAAE+B,KAAKr4B,GAAGu+B,OAAOx8B,KAAKmR,OAC9B,IAAI9J,IAAMiX,EAEV,GAAIA,EAAEgT,IAAItxB,KAAK5C,IAAM,EAAG,CACtBiK,IAAMiX,EAAEgY,KAAKt2B,KAAK5C,EACnB,MAAM,GAAIkhB,EAAE0gB,KAAK,GAAK,EAAG,CACxB33B,IAAMiX,EAAE+X,KAAKr2B,KAAK5C,GAGpB,OAAOiK,IAAI44B,UAAUjgC,KACtB,EAED+iC,KAAKpjC,UAAUiJ,IAAM,SAASA,IAAK9F,EAAG1B,GACpC,GAAI0B,EAAE2wB,UAAYryB,EAAEqyB,SAAU,OAAO,IAAI3C,GAAG,GAAGmP,UAAUjgC,MAEzD,IAAIu0B,EAAIzxB,EAAE8F,IAAIxH,GACd,IAAInD,EAAIs2B,EAAE2I,MAAMl9B,KAAKmR,OAAOvI,IAAI5I,KAAKijC,MAAMhG,OAAOj9B,KAAKmR,OAAOvI,IAAI5I,KAAK5C,GACvE,IAAIkhB,EAAIiW,EAAE+B,KAAKr4B,GAAGu+B,OAAOx8B,KAAKmR,OAC9B,IAAI9J,IAAMiX,EACV,GAAIA,EAAEgT,IAAItxB,KAAK5C,IAAM,EAAG,CACtBiK,IAAMiX,EAAEgY,KAAKt2B,KAAK5C,EACnB,MAAM,GAAIkhB,EAAE0gB,KAAK,GAAK,EAAG,CACxB33B,IAAMiX,EAAE+X,KAAKr2B,KAAK5C,GAGpB,OAAOiK,IAAI44B,UAAUjgC,KACtB,EAED+iC,KAAKpjC,UAAUs/B,KAAO,SAASA,KAAMn8B,GAEnC,IAAIuE,IAAMrH,KAAKsiC,KAAKx/B,EAAE+7B,OAAO7+B,KAAK5C,GAAGwL,IAAI5I,KAAKo+B,KAC9C,OAAO/2B,IAAI44B,UAAUjgC,KACtB,CACF,EA19GD,CA09GoCuwB,OAAQvwB;gPCx9G5C,IAAIlD,OAA0B2B,gBAC9B,IAAIK,OAAShC,OAAOgC,OAGpB,SAASokC,UAAW5zB,IAAKC,KACvB,IAAK,IAAIyT,OAAO1T,IAAK,CACnBC,IAAIyT,KAAO1T,IAAI0T,MAGnB,GAAIlkB,OAAO4B,MAAQ5B,OAAO2C,OAAS3C,OAAO2B,aAAe3B,OAAO+C,gBAAiB,CAC/E0uB,eAAiBzzB,MACnB,KAAO,CAELomC,UAAUpmC,OAAQ+B,SAClBA,eAAiBskC,WAGnB,SAASA,WAAY7iC,IAAKC,iBAAkBrF,QAC1C,OAAO4D,OAAOwB,IAAKC,iBAAkBrF,QAGvCioC,WAAWxjC,UAAYF,OAAO2Q,OAAOtR,OAAOa,WAG5CujC,UAAUpkC,OAAQqkC,YAElBA,WAAWziC,KAAO,SAAUJ,IAAKC,iBAAkBrF,QACjD,UAAWoF,MAAQ,SAAU,CAC3B,MAAM,IAAIE,UAAU,iCAEtB,OAAO1B,OAAOwB,IAAKC,iBAAkBrF,SAGvCioC,WAAW1hC,MAAQ,SAAUD,KAAME,KAAMC,UACvC,UAAWH,OAAS,SAAU,CAC5B,MAAM,IAAIhB,UAAU,6BAEtB,IAAIH,IAAMvB,OAAO0C,MACjB,GAAIE,OAASzB,UAAW,CACtB,UAAW0B,WAAa,SAAU,CAChCtB,IAAIqB,KAAKA,KAAMC,SACrB,KAAW,CACLtB,IAAIqB,KAAKA,MAEf,KAAS,CACLrB,IAAIqB,KAAK,GAEX,OAAOrB,KAGT8iC,WAAW1iC,YAAc,SAAUe,MACjC,UAAWA,OAAS,SAAU,CAC5B,MAAM,IAAIhB,UAAU,6BAEtB,OAAO1B,OAAO0C,OAGhB2hC,WAAWthC,gBAAkB,SAAUL,MACrC,UAAWA,OAAS,SAAU,CAC5B,MAAM,IAAIhB,UAAU,6BAEtB,OAAO1D,OAAOiC,WAAWyC,KAC3B,4JCzDA,IAAI4hC,QAAgC3kC,oBAACK,OACrC,SAAS6lB,KAAM0e,UACb,GAAIA,SAASnoC,QAAU,IAAK,CAAE,MAAM,IAAIsF,UAAU,oBAAoB,CACtE,IAAI8iC,SAAW,IAAIzoC,WAAW,KAC9B,IAAK,IAAIqL,EAAI,EAAGA,EAAIo9B,SAASpoC,OAAQgL,IAAK,CACxCo9B,SAASp9B,GAAK,IAEhB,IAAK,IAAIlL,EAAI,EAAGA,EAAIqoC,SAASnoC,OAAQF,IAAK,CACxC,IAAI+H,EAAIsgC,SAASE,OAAOvoC,GACxB,IAAIwoC,GAAKzgC,EAAE5H,WAAW,GACtB,GAAImoC,SAASE,MAAQ,IAAK,CAAE,MAAM,IAAIhjC,UAAUuC,EAAI,gBAAgB,CACpEugC,SAASE,IAAMxoC,EAEjB,IAAI8pB,KAAOue,SAASnoC,OACpB,IAAIuoC,OAASJ,SAASE,OAAO,GAC7B,IAAIG,OAAS7lC,KAAKS,IAAIwmB,MAAQjnB,KAAKS,IAAI,KACvC,IAAIqlC,QAAU9lC,KAAKS,IAAI,KAAOT,KAAKS,IAAIwmB,MACvC,SAASzT,OAAQuyB,QACf,GAAI9oC,MAAM2H,QAAQmhC,SAAWA,kBAAkB/oC,WAAY,CAAE+oC,OAASR,QAAQ1iC,KAAKkjC,OAAO,CAC1F,IAAKR,QAAQrjC,SAAS6jC,QAAS,CAAE,MAAM,IAAIpjC,UAAU,kBAAkB,CACvE,GAAIojC,OAAO1oC,SAAW,EAAG,CAAE,MAAO,EAAE,CAEpC,IAAI2oC,OAAS,EACb,IAAI3oC,OAAS,EACb,IAAI4oC,OAAS,EACb,IAAIC,KAAOH,OAAO1oC,OAClB,MAAO4oC,SAAWC,MAAQH,OAAOE,UAAY,EAAG,CAC9CA,SACAD,SAGF,IAAIriC,MAASuiC,KAAOD,QAAUH,QAAU,IAAO,EAC/C,IAAIK,IAAM,IAAInpC,WAAW2G,MAEzB,MAAOsiC,SAAWC,KAAM,CACtB,IAAIzQ,MAAQsQ,OAAOE,QAEnB,IAAI9oC,EAAI,EACR,IAAK,IAAIipC,IAAMziC,KAAO,GAAI8xB,QAAU,GAAKt4B,EAAIE,SAAY+oC,OAAS,EAAIA,MAAOjpC,IAAK,CAChFs4B,OAAU,IAAM0Q,IAAIC,OAAU,EAC9BD,IAAIC,KAAQ3Q,MAAQxO,OAAU,EAC9BwO,MAASA,MAAQxO,OAAU,EAE7B,GAAIwO,QAAU,EAAG,CAAE,MAAM,IAAIh4B,MAAM,iBAAiB,CACpDJ,OAASF,EACT8oC,SAGF,IAAII,IAAM1iC,KAAOtG,OACjB,MAAOgpC,MAAQ1iC,MAAQwiC,IAAIE,OAAS,EAAG,CACrCA,MAGF,IAAIp/B,IAAM2+B,OAAOU,OAAON,QACxB,KAAOK,IAAM1iC,OAAQ0iC,IAAK,CAAEp/B,KAAOu+B,SAASE,OAAOS,IAAIE,KAAK,CAC5D,OAAOp/B,IAET,SAASs/B,aAAcR,QACrB,UAAWA,SAAW,SAAU,CAAE,MAAM,IAAIpjC,UAAU,kBAAkB,CACxE,GAAIojC,OAAO1oC,SAAW,EAAG,CAAE,OAAOkoC,QAAQ3hC,MAAM,EAAE,CAClD,IAAI4iC,IAAM,EAEV,IAAIR,OAAS,EACb,IAAI3oC,OAAS,EACb,MAAO0oC,OAAOS,OAASZ,OAAQ,CAC7BI,SACAQ,MAGF,IAAI7iC,MAAUoiC,OAAO1oC,OAASmpC,KAAOX,OAAU,IAAO,EACtD,IAAIY,KAAO,IAAIzpC,WAAW2G,MAE1B,MAAO6iC,IAAMT,OAAO1oC,OAAQ,CAE1B,IAAIqpC,SAAWX,OAAOzoC,WAAWkpC,KAEjC,GAAIE,SAAW,IAAK,CAAE,MAAM,CAE5B,IAAIjR,MAAQgQ,SAASiB,UAErB,GAAIjR,QAAU,IAAK,CAAE,MAAM,CAC3B,IAAIt4B,EAAI,EACR,IAAK,IAAIwpC,IAAMhjC,KAAO,GAAI8xB,QAAU,GAAKt4B,EAAIE,SAAYspC,OAAS,EAAIA,MAAOxpC,IAAK,CAChFs4B,OAAUxO,KAAOwf,KAAKE,OAAU,EAChCF,KAAKE,KAAQlR,MAAQ,MAAS,EAC9BA,MAASA,MAAQ,MAAS,EAE5B,GAAIA,QAAU,EAAG,CAAE,MAAM,IAAIh4B,MAAM,iBAAiB,CACpDJ,OAASF,EACTqpC,MAGF,IAAII,IAAMjjC,KAAOtG,OACjB,MAAOupC,MAAQjjC,MAAQ8iC,KAAKG,OAAS,EAAG,CACtCA,MAEF,IAAIC,IAAMtB,QAAQ3iC,YAAYojC,QAAUriC,KAAOijC,MAC/CC,IAAIhjC,KAAK,EAAM,EAAGmiC,QAClB,IAAI39B,EAAI29B,OACR,MAAOY,MAAQjjC,KAAM,CACnBkjC,IAAIx+B,KAAOo+B,KAAKG,OAElB,OAAOC,IAET,SAASC,OAAQ7iC,QACf,IAAIhF,OAASsnC,aAAatiC,QAC1B,GAAIhF,OAAQ,CAAE,OAAOA,MAAM,CAC3B,MAAM,IAAIxB,MAAM,WAAawpB,KAAO,cAEtC,MAAO,CACLzT,OAAQA,OACR+yB,aAAcA,aACdO,OAAQA,QAGZr1B,IAAiBqV,yHC1HjB,IAAIigB,MAAyBnmC,aAC7B,IAAI4kC,SAAW,6DAEDwB,OAAGD,MAAMvB,oGCHvB,SAASxzB,QAAQvL,GACb,IAAK+B,OAAOyJ,cAAcxL,IAAMA,EAAI,EAChC,MAAM,IAAIhJ,MAAM,kCAAoCgJ,EAC5D,CAEA,SAASyL,QAAQjN,GACb,OAAOA,aAAajI,YAAegG,YAAYC,OAAOgC,IAAMA,EAAEiL,YAAYI,OAAS,YACvF,CACA,SAAS6B,OAAO5O,KAAM6O,SAClB,IAAKF,QAAQ3O,GACT,MAAM,IAAI9F,MAAM,uBACpB,GAAI2U,QAAQ/U,OAAS,IAAM+U,QAAQ9J,SAAS/E,EAAElG,QAC1C,MAAM,IAAII,MAAM,iCAAmC2U,QAAU,gBAAkB7O,EAAElG,OACzF,CAOA,SAASqV,QAAQC,SAAUC,cAAgB,MACvC,GAAID,SAASE,UACT,MAAM,IAAIpV,MAAM,oCACpB,GAAImV,eAAiBD,SAASG,SAC1B,MAAM,IAAIrV,MAAM,wCACxB,CACA,SAASsV,QAAQ1I,IAAKsI,UAClBR,OAAO9H,KACP,MAAMjF,IAAMuN,SAASH,UACrB,GAAInI,IAAIhN,OAAS+H,IAAK,CAClB,MAAM,IAAI3H,MAAM,yDAA2D2H,IACnF,CACA;sEChBO,MAAM6hC,IAAOjpC,KAAQ,IAAIqY,YAAYrY,IAAIiB,OAAQjB,IAAIqE,WAAYrC,KAAKQ,MAAMxC,IAAItB,WAAa,IAE7F,MAAMwW,WAAclV,KAAQ,IAAImV,SAASnV,IAAIiB,OAAQjB,IAAIqE,WAAYrE,IAAItB,YAEzE,MAAM0W,KAAO,CAACC,KAAMC,QAAWD,MAAS,GAAKC,MAAWD,OAASC,MAGjE,MAAMnU,KAAuB,KAAO,IAAInC,WAAW,IAAIqZ,YAAY,CAAC,YAAapX,QAAQ,KAAO,GAAnE,GAE7B,MAAMioC,SAAY7zB,MAAWA,MAAQ,GAAM,WAC5CA,MAAQ,EAAK,SACbA,OAAS,EAAK,MACdA,OAAS,GAAM,IAId,SAAS8zB,WAAWnpC,KACvB,IAAK,IAAIb,EAAI,EAAGA,EAAIa,IAAIX,OAAQF,IAAK,CACjCa,IAAIb,GAAK+pC,SAASlpC,IAAIb,GAC9B,CACA,CAoEO,SAAS4I,YAAYkB,KACxB,UAAWA,MAAQ,SACf,MAAM,IAAIxJ,MAAM,2CAA6CwJ,KACjE,OAAO,IAAIjK,YAAW,IAAIuW,aAAcC,OAAOvM,KACnD,CAMO,SAASwM,QAAQ5O,MACpB,UAAWA,OAAS,SAChBA,KAAOkB,YAAYlB,MACvBsN,OAAOtN,MACP,OAAOA,IACX,CAoBO,MAAMkP,KAETC,QACI,OAAO7R,KAAK8R,YACpB,EAQO,SAASC,gBAAgBC,UAC5B,MAAMC,MAASzD,KAAQwD,WAAWE,OAAOZ,QAAQ9C,MAAM2D,SACvD,MAAMvW,IAAMoW,WACZC,MAAM5B,UAAYzU,IAAIyU,UACtB4B,MAAM3B,SAAW1U,IAAI0U,SACrB2B,MAAM7B,OAAS,IAAM4B,WACrB,OAAOC,KACX,CCzJA,SAASM,aAAaC,KAAMtS,WAAYlC,MAAOhB,MAC3C,UAAWwV,KAAKD,eAAiB,WAC7B,OAAOC,KAAKD,aAAarS,WAAYlC,MAAOhB,MAChD,MAAMyV,KAAOzI,OAAO,IACpB,MAAM0I,SAAW1I,OAAO,YACxB,MAAM2I,GAAKtM,OAAQrI,OAASyU,KAAQC,UACpC,MAAME,GAAKvM,OAAOrI,MAAQ0U,UAC1B,MAAMvC,EAAInT,KAAO,EAAI,EACrB,MAAM6V,EAAI7V,KAAO,EAAI,EACrBwV,KAAKM,UAAU5S,WAAaiQ,EAAGwC,GAAI3V,MACnCwV,KAAKM,UAAU5S,WAAa2S,EAAGD,GAAI5V,KACvC,CAIO,MAAM+V,IAAM,CAACjQ,EAAG1B,EAAGnD,IAAO6E,EAAI1B,GAAO0B,EAAI7E,EAIzC,MAAM+U,IAAM,CAAClQ,EAAG1B,EAAGnD,IAAO6E,EAAI1B,EAAM0B,EAAI7E,EAAMmD,EAAInD,EAKlD,MAAMgV,eAAerB,KACxB7D,YAAYuC,SAAUD,UAAW6C,UAAWlW,MACxCgR,QACAhO,KAAKsQ,SAAWA,SAChBtQ,KAAKqQ,UAAYA,UACjBrQ,KAAKkT,UAAYA,UACjBlT,KAAKhD,KAAOA,KACZgD,KAAK2Q,SAAW,MAChB3Q,KAAK9E,OAAS,EACd8E,KAAKsD,IAAM,EACXtD,KAAK0Q,UAAY,MACjB1Q,KAAKlD,OAAS,IAAIjC,WAAWyV,UAC7BtQ,KAAKwS,KAAOzB,WAAW/Q,KAAKlD,OACpC,CACIoV,OAAOxP,MACH6N,QAAQvQ,MACR,MAAMwS,KAAEA,KAAI1V,OAAEA,OAAMwT,SAAEA,UAAatQ,KACnC0C,KAAO4O,QAAQ5O,MACf,MAAMzH,IAAMyH,KAAKxH,OACjB,IAAK,IAAIoI,IAAM,EAAGA,IAAMrI,KAAM,CAC1B,MAAMkY,KAAOtV,KAAKoF,IAAIqN,SAAWtQ,KAAKsD,IAAKrI,IAAMqI,KAEjD,GAAI6P,OAAS7C,SAAU,CACnB,MAAM8C,SAAWrC,WAAWrO,MAC5B,KAAO4N,UAAYrV,IAAMqI,IAAKA,KAAOgN,SACjCtQ,KAAKqT,QAAQD,SAAU9P,KAC3B,QAChB,CACYxG,OAAOyG,IAAIb,KAAK4F,SAAShF,IAAKA,IAAM6P,MAAOnT,KAAKsD,KAChDtD,KAAKsD,KAAO6P,KACZ7P,KAAO6P,KACP,GAAInT,KAAKsD,MAAQgN,SAAU,CACvBtQ,KAAKqT,QAAQb,KAAM,GACnBxS,KAAKsD,IAAM,CAC3B,CACA,CACQtD,KAAK9E,QAAUwH,KAAKxH,OACpB8E,KAAKsT,aACL,OAAOtT,IACf,CACIuT,WAAWrL,KACPqI,QAAQvQ,MACR4Q,QAAQ1I,IAAKlI,MACbA,KAAK2Q,SAAW,KAIhB,MAAM7T,OAAEA,OAAM0V,KAAEA,KAAIlC,SAAEA,SAAQtT,KAAEA,MAASgD,KACzC,IAAIsD,IAAEA,KAAQtD,KAEdlD,OAAOwG,OAAS,IAChBtD,KAAKlD,OAAOwL,SAAShF,KAAK5B,KAAK,GAG/B,GAAI1B,KAAKkT,UAAY5C,SAAWhN,IAAK,CACjCtD,KAAKqT,QAAQb,KAAM,GACnBlP,IAAM,CAClB,CAEQ,IAAK,IAAItI,EAAIsI,IAAKtI,EAAIsV,SAAUtV,IAC5B8B,OAAO9B,GAAK,EAIhBuX,aAAaC,KAAMlC,SAAW,EAAGtG,OAAOhK,KAAK9E,OAAS,GAAI8B,MAC1DgD,KAAKqT,QAAQb,KAAM,GACnB,MAAMgB,MAAQzC,WAAW7I,KACzB,MAAMjN,IAAM+E,KAAKqQ,UAEjB,GAAIpV,IAAM,EACN,MAAM,IAAIK,MAAM,+CACpB,MAAMmY,OAASxY,IAAM,EACrB,MAAMyY,MAAQ1T,KAAKF,MACnB,GAAI2T,OAASC,MAAMxY,OACf,MAAM,IAAII,MAAM,sCACpB,IAAK,IAAIN,EAAI,EAAGA,EAAIyY,OAAQzY,IACxBwY,MAAMV,UAAU,EAAI9X,EAAG0Y,MAAM1Y,GAAIgC,KAC7C,CACImV,SACI,MAAMrV,OAAEA,OAAMuT,UAAEA,WAAcrQ,KAC9BA,KAAKuT,WAAWzW,QAChB,MAAMuK,IAAMvK,OAAOmF,MAAM,EAAGoO,WAC5BrQ,KAAK2T,UACL,OAAOtM,GACf,CACIyK,WAAW8B,IACPA,KAAOA,GAAK,IAAI5T,KAAK+N,aACrB6F,GAAGrQ,OAAOvD,KAAKF,OACf,MAAMwQ,SAAEA,SAAQxT,OAAEA,OAAM5B,OAAEA,OAAMyV,SAAEA,SAAQD,UAAEA,UAASpN,IAAEA,KAAQtD,KAC/D4T,GAAG1Y,OAASA,OACZ0Y,GAAGtQ,IAAMA,IACTsQ,GAAGjD,SAAWA,SACdiD,GAAGlD,UAAYA,UACf,GAAIxV,OAASoV,SACTsD,GAAG9W,OAAOyG,IAAIzG,QAClB,OAAO8W,EACf,ECtHA,MAAMqxB,WAA2B,IAAI/wB,YAAY,CAC7C,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,aAKxF,MAAMgxB,YAA4B,IAAIhxB,YAAY,CAC9C,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,aAIxF,MAAMixB,WAA2B,IAAIjxB,YAAY,iBAC1C,MAAMkxB,eAAenyB,OACxBlF,cACIC,MAAM,GAAI,GAAI,EAAG,OAGjBhO,KAAKwZ,EAAI0rB,YAAU,GAAK,EACxBllC,KAAK0qB,EAAIwa,YAAU,GAAK,EACxBllC,KAAK2qB,EAAIua,YAAU,GAAK,EACxBllC,KAAK4qB,EAAIsa,YAAU,GAAK,EACxBllC,KAAK0N,EAAIw3B,YAAU,GAAK,EACxBllC,KAAKyZ,EAAIyrB,YAAU,GAAK,EACxBllC,KAAK8qB,EAAIoa,YAAU,GAAK,EACxBllC,KAAK+qB,EAAIma,YAAU,GAAK,CAChC,CACIplC,MACI,MAAM0Z,EAAEA,EAACkR,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACld,EAAEA,EAAC+L,EAAEA,EAACqR,EAAEA,EAACC,EAAEA,GAAM/qB,KACnC,MAAO,CAACwZ,EAAGkR,EAAGC,EAAGC,EAAGld,EAAG+L,EAAGqR,EAAGC,EACrC,CAEIxnB,IAAIiW,EAAGkR,EAAGC,EAAGC,EAAGld,EAAG+L,EAAGqR,EAAGC,GACrB/qB,KAAKwZ,EAAIA,EAAI,EACbxZ,KAAK0qB,EAAIA,EAAI,EACb1qB,KAAK2qB,EAAIA,EAAI,EACb3qB,KAAK4qB,EAAIA,EAAI,EACb5qB,KAAK0N,EAAIA,EAAI,EACb1N,KAAKyZ,EAAIA,EAAI,EACbzZ,KAAK8qB,EAAIA,EAAI,EACb9qB,KAAK+qB,EAAIA,EAAI,CACrB,CACI1X,QAAQb,KAAMzV,QAEV,IAAK,IAAI/B,EAAI,EAAGA,EAAI,GAAIA,IAAK+B,QAAU,EACnCooC,WAASnqC,GAAKwX,KAAKwE,UAAUja,OAAQ,OACzC,IAAK,IAAI/B,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC1B,MAAMqqC,IAAMF,WAASnqC,EAAI,IACzB,MAAMsqC,GAAKH,WAASnqC,EAAI,GACxB,MAAMuqC,GAAKt0B,KAAKo0B,IAAK,GAAKp0B,KAAKo0B,IAAK,IAAOA,MAAQ,EACnD,MAAMG,GAAKv0B,KAAKq0B,GAAI,IAAMr0B,KAAKq0B,GAAI,IAAOA,KAAO,GACjDH,WAASnqC,GAAMwqC,GAAKL,WAASnqC,EAAI,GAAKuqC,GAAKJ,WAASnqC,EAAI,IAAO,CAC3E,CAEQ,IAAIwe,EAAEA,EAACkR,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACld,EAAEA,EAAC+L,EAAEA,EAACqR,EAAEA,EAACC,EAAEA,GAAM/qB,KACjC,IAAK,IAAIhF,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAMyqC,OAASx0B,KAAKvD,EAAG,GAAKuD,KAAKvD,EAAG,IAAMuD,KAAKvD,EAAG,IAClD,MAAM0d,GAAML,EAAI0a,OAAS1yB,IAAIrF,EAAG+L,EAAGqR,GAAKma,WAASjqC,GAAKmqC,WAASnqC,GAAM,EACrE,MAAM0qC,OAASz0B,KAAKuI,EAAG,GAAKvI,KAAKuI,EAAG,IAAMvI,KAAKuI,EAAG,IAClD,MAAM6R,GAAMqa,OAAS1yB,IAAIwG,EAAGkR,EAAGC,GAAM,EACrCI,EAAID,EACJA,EAAIrR,EACJA,EAAI/L,EACJA,EAAKkd,EAAIQ,GAAM,EACfR,EAAID,EACJA,EAAID,EACJA,EAAIlR,EACJA,EAAK4R,GAAKC,GAAM,CAC5B,CAEQ7R,EAAKA,EAAIxZ,KAAKwZ,EAAK,EACnBkR,EAAKA,EAAI1qB,KAAK0qB,EAAK,EACnBC,EAAKA,EAAI3qB,KAAK2qB,EAAK,EACnBC,EAAKA,EAAI5qB,KAAK4qB,EAAK,EACnBld,EAAKA,EAAI1N,KAAK0N,EAAK,EACnB+L,EAAKA,EAAIzZ,KAAKyZ,EAAK,EACnBqR,EAAKA,EAAI9qB,KAAK8qB,EAAK,EACnBC,EAAKA,EAAI/qB,KAAK+qB,EAAK,EACnB/qB,KAAKuD,IAAIiW,EAAGkR,EAAGC,EAAGC,EAAGld,EAAG+L,EAAGqR,EAAGC,EACtC,CACIzX,aACI6xB,WAASzjC,KAAK,EACtB,CACIiS,UACI3T,KAAKuD,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9BvD,KAAKlD,OAAO4E,KAAK,EACzB,GAqBO,MAAMikC,SAAyB5zB,iBAAgB,IAAM,IAAIqzB,8KCzGhE,SAASrqB,QAAQjY,EAAGG,IAAK8B,KACvB,OAAO9B,KAAOH,GAAKA,GAAKiC,IAO1B,SAAS6gC,aAAa/O,GACpB,GAAIA,IAAM52B,UAAW,MAAO,CAAE,EAC9B,GAAI42B,IAAMp3B,OAAOo3B,GAAI,OAAOA,EAC5B,MAAMr2B,UAAU,4CAOlB,SAASqlC,mBAAmB/jC,QAI1B,IAAIpE,EAAIwF,OAAOpB,QAGf,IAAIwC,EAAI5G,EAAExC,OAGV,IAAIF,EAAI,EAGR,IAAIsjB,EAAI,GAGR,MAAOtjB,EAAIsJ,EAAG,CAGZ,IAAIrG,EAAIP,EAAEvC,WAAWH,GAKrB,GAAIiD,EAAI,OAAUA,EAAI,MAAQ,CAE5BqgB,EAAEhiB,KAAK2B,QAIJ,GAAI,OAAUA,GAAKA,GAAK,MAAQ,CAEnCqgB,EAAEhiB,KAAK,YAIJ,GAAI,OAAU2B,GAAKA,GAAK,MAAQ,CAGnC,GAAIjD,IAAMsJ,EAAI,EAAG,CACfga,EAAEhiB,KAAK,WAGJ,CAEH,IAAImB,EAAIqE,OAAO3G,WAAWH,EAAI,GAG9B,GAAI,OAAUyC,GAAKA,GAAK,MAAQ,CAE9B,IAAIqF,EAAI7E,EAAI,KAGZ,IAAImD,EAAI3D,EAAI,KAIZ6gB,EAAEhiB,KAAK,OAAWwG,GAAK,IAAM1B,GAG7BpG,GAAK,MAKD,CACJsjB,EAAEhiB,KAAK,SAMbtB,GAAK,EAIP,OAAOsjB,EAOT,SAASwnB,mBAAmBC,aAC1B,IAAIroC,EAAI,GACR,IAAK,IAAI1C,EAAI,EAAGA,EAAI+qC,YAAY7qC,SAAUF,EAAG,CAC3C,IAAIgrC,GAAKD,YAAY/qC,GACrB,GAAIgrC,IAAM,MAAQ,CAChBtoC,GAAKwF,OAAO8E,aAAag+B,GAC/B,KAAW,CACLA,IAAM,MACNtoC,GAAKwF,OAAO8E,cAAcg+B,IAAM,IAAM,OACZA,GAAK,MAAS,QAG5C,OAAOtoC,EAiBL,IAAIuoC,eAAiB,EASzB,SAASC,OAAOC,QAEdnmC,KAAKmmC,OAAS,GAAGlkC,MAAMuB,KAAK2iC,QAG9BD,OAAOvmC,UAAY,CAIjBymC,YAAa,WACX,OAAQpmC,KAAKmmC,OAAOjrC,MACrB,EAUA2B,KAAM,WACL,IAAKmD,KAAKmmC,OAAOjrC,OACf,OAAO+qC,cACR,OAAOjmC,KAAKmmC,OAAOh1B,OACpB,EASFk1B,QAAS,SAASC,OAChB,GAAIxrC,MAAM2H,QAAQ6jC,OAAQ,CACxB,IAAIH,OAAsC,MAC1C,MAAOA,OAAOjrC,OACZ8E,KAAKmmC,OAAOI,QAAQJ,OAAOK,MACnC,KAAW,CACLxmC,KAAKmmC,OAAOI,QAAQD,OAEvB,EASDhqC,KAAM,SAASgqC,OACb,GAAIxrC,MAAM2H,QAAQ6jC,OAAQ,CACxB,IAAIH,OAAsC,MAC1C,MAAOA,OAAOjrC,OACZ8E,KAAKmmC,OAAO7pC,KAAK6pC,OAAOh1B,QAChC,KAAW,CACLnR,KAAKmmC,OAAO7pC,KAAKgqC,UAYvB,IAAI31B,UAAY,EAOhB,SAAS81B,aAAaC,MAAOC,gBAC3B,GAAID,MACF,MAAMlmC,UAAU,iBAClB,OAAOmmC,gBAAkB,MAOb,IAAIC,iBAAmB,QAUrC,SAASC,YAAYllC,SAAU4rB,SAC7B,KAAMvtB,gBAAgB6mC,aAAc,CAClC,OAAO,IAAIA,YAAYllC,SAAU4rB,SAEnC5rB,SAAWA,WAAa1B,UAAYiD,OAAOvB,UAAUwB,cAAgByjC,iBACrE,GAAIjlC,WAAailC,iBAAkB,CACjC,MAAM,IAAItrC,MAAM,mDAElBiyB,QAAUqY,aAAarY,SAGvBvtB,KAAK8mC,WAAa,MAElB9mC,KAAK+mC,SAAW,MAEhB/mC,KAAKgnC,SAAW,KAEhBhnC,KAAKinC,OAASC,QAAQ3Z,QAAQ,UAE9BvtB,KAAKmnC,WAAaD,QAAQ3Z,QAAQ,cAElC9tB,OAAOG,eAAeI,KAAM,WAAY,CAAChC,MAAO,UAChDyB,OAAOG,eAAeI,KAAM,QAAS,CAAChC,MAAOgC,KAAKinC,SAClDxnC,OAAOG,eAAeI,KAAM,YAAa,CAAChC,MAAOgC,KAAKmnC,aAGxDN,YAAYlnC,UAAY,CAMtBglC,OAAQ,SAASA,OAAOp2B,MAAOgf,SAC7B,IAAInlB,MACJ,UAAWmG,QAAU,UAAYA,iBAAiB1N,YAAa,CAC7DuH,MAAQ,IAAIvN,WAAW0T,MACxB,MAAM,UAAWA,QAAU,UAAY,WAAYA,OACzCA,MAAMzR,kBAAkB+D,YAAa,CAC9CuH,MAAQ,IAAIvN,WAAW0T,MAAMzR,OACNyR,MAAMrO,WACNqO,MAAMhU,WACnC,KAAW,CACL6N,MAAQ,IAAIvN,WAAW,GAGzB0yB,QAAUqY,aAAarY,SAEvB,IAAKvtB,KAAK8mC,WAAY,CACpB9mC,KAAKgnC,SAAW,IAAII,YAAY,CAACV,MAAO1mC,KAAKinC,SAC7CjnC,KAAK+mC,SAAW,MAElB/mC,KAAK8mC,WAAaI,QAAQ3Z,QAAQ,WAElC,IAAI8Z,aAAe,IAAInB,OAAO99B,OAE9B,IAAI29B,YAAc,GAGlB,IAAI/nB,OAEJ,OAAQqpB,aAAajB,cAAe,CAClCpoB,OAAShe,KAAKgnC,SAASM,QAAQD,aAAcA,aAAaxqC,QAC1D,GAAImhB,SAAWrN,SACb,MACF,GAAIqN,SAAW,KACb,SACF,GAAIljB,MAAM2H,QAAQub,QAChB+nB,YAAYzpC,KAAKoI,MAAMqhC,YAA0C,aAEjEA,YAAYzpC,KAAK0hB,QAErB,IAAKhe,KAAK8mC,WAAY,CACpB,EAAG,CACD9oB,OAAShe,KAAKgnC,SAASM,QAAQD,aAAcA,aAAaxqC,QAC1D,GAAImhB,SAAWrN,SACb,MACF,GAAIqN,SAAW,KACb,SACF,GAAIljB,MAAM2H,QAAQub,QAChB+nB,YAAYzpC,KAAKoI,MAAMqhC,YAA0C,aAEjEA,YAAYzpC,KAAK0hB,OAC3B,QAAgBqpB,aAAajB,eACvBpmC,KAAKgnC,SAAW,KAGlB,GAAIjB,YAAY7qC,OAAQ,CAItB,GAAI,CAAC,SAASM,QAAQwE,KAAK2B,aAAe,IACrC3B,KAAKmnC,aAAennC,KAAK+mC,SAAU,CAEtC,GAAIhB,YAAY,KAAO,MAAQ,CAC7B/lC,KAAK+mC,SAAW,KAChBhB,YAAY50B,OACtB,KAAe,CAGLnR,KAAK+mC,SAAW,OAKtB,OAAOjB,mBAAmBC,eAY9B,SAAS30B,YAAYzP,SAAU4rB,SAC7B,KAAMvtB,gBAAgBoR,aACpB,OAAO,IAAIA,YAAYzP,SAAU4rB,SACnC5rB,SAAWA,WAAa1B,UAAYiD,OAAOvB,UAAUwB,cAAgByjC,iBACrE,GAAIjlC,WAAailC,iBAAkB,CACjC,MAAM,IAAItrC,MAAM,mDAElBiyB,QAAUqY,aAAarY,SAGvBvtB,KAAK8mC,WAAa,MAElB9mC,KAAKunC,SAAW,KAEhBvnC,KAAKwnC,SAAW,CAACd,MAAOQ,QAAQ3Z,QAAQ,WAExC9tB,OAAOG,eAAeI,KAAM,WAAY,CAAChC,MAAO,UAGlDoT,YAAYzR,UAAY,CAMtB0R,OAAQ,SAASA,OAAOo2B,WAAYla,SAClCka,WAAaA,WAAavkC,OAAOukC,YAAc,GAC/Cla,QAAUqY,aAAarY,SAKvB,IAAKvtB,KAAK8mC,WACR9mC,KAAKunC,SAAW,IAAIG,YAAY1nC,KAAKwnC,UACvCxnC,KAAK8mC,WAAaI,QAAQ3Z,QAAQ,WAElC,IAAInlB,MAAQ,GACZ,IAAIi/B,aAAe,IAAInB,OAAOL,mBAAmB4B,aAEjD,IAAIzpB,OACJ,OAAQqpB,aAAajB,cAAe,CAClCpoB,OAAShe,KAAKunC,SAASD,QAAQD,aAAcA,aAAaxqC,QAC1D,GAAImhB,SAAWrN,SACb,MACF,GAAI7V,MAAM2H,QAAQub,QAChB5V,MAAM9L,KAAKoI,MAAM0D,MAAoC,aAErDA,MAAM9L,KAAK0hB,QAEf,IAAKhe,KAAK8mC,WAAY,CACpB,MAAO,KAAM,CACX9oB,OAAShe,KAAKunC,SAASD,QAAQD,aAAcA,aAAaxqC,QAC1D,GAAImhB,SAAWrN,SACb,MACF,GAAI7V,MAAM2H,QAAQub,QAChB5V,MAAM9L,KAAKoI,MAAM0D,MAAoC,aAErDA,MAAM9L,KAAK0hB,QAEfhe,KAAKunC,SAAW,KAElB,OAAO,IAAI1sC,WAAWuN,SAe1B,SAASg/B,YAAY7Z,SACnB,IAAImZ,MAAQnZ,QAAQmZ,MAMpB,IAA0BiB,gBAAkB,EAClBC,gBAAkB,EAClBC,kBAAoB,EACpBC,oBAAsB,IACtBC,oBAAsB,IAShD/nC,KAAKsnC,QAAU,SAASU,OAAQC,MAG9B,GAAIA,OAAShC,eAAiB4B,oBAAsB,EAAG,CACrDA,kBAAoB,EACpB,OAAOpB,aAAaC,OAItB,GAAIuB,OAAShC,cACX,OAAOt1B,SAGT,GAAIk3B,oBAAsB,EAAG,CAG3B,GAAI9sB,QAAQktB,KAAM,EAAM,KAAO,CAE7B,OAAOA,KAIT,GAAIltB,QAAQktB,KAAM,IAAM,KAAO,CAG7BJ,kBAAoB,EACpBF,gBAAkBM,KAAO,SAItB,GAAIltB,QAAQktB,KAAM,IAAM,KAAO,CAElC,GAAIA,OAAS,IACXH,oBAAsB,IAExB,GAAIG,OAAS,IACXF,oBAAsB,IAGxBF,kBAAoB,EACpBF,gBAAkBM,KAAO,SAItB,GAAIltB,QAAQktB,KAAM,IAAM,KAAO,CAElC,GAAIA,OAAS,IACXH,oBAAsB,IAExB,GAAIG,OAAS,IACXF,oBAAsB,IAGxBF,kBAAoB,EACpBF,gBAAkBM,KAAO,QAItB,CAEH,OAAOxB,aAAaC,OAMtBiB,gBAAkBA,iBAAoB,EAAIE,kBAC1C,OAAO,KAKT,IAAK9sB,QAAQktB,KAAMH,oBAAqBC,qBAAsB,CAK5DJ,gBAAkBE,kBAAoBD,gBAAkB,EACxDE,oBAAsB,IACtBC,oBAAsB,IAGtBC,OAAO3B,QAAQ4B,MAGf,OAAOxB,aAAaC,OAKtBoB,oBAAsB,IACtBC,oBAAsB,IAKtBH,iBAAmB,EACnBD,iBAAoBM,KAAO,KAAU,GAAKJ,kBAAoBD,iBAI9D,GAAIA,kBAAoBC,kBACtB,OAAO,KAGT,IAAIK,WAAaP,gBAIjBA,gBAAkBE,kBAAoBD,gBAAkB,EAGxD,OAAOM,UACR,EAQH,SAASR,YAAYna,SACPA,QAAQmZ,MAMpB1mC,KAAKsnC,QAAU,SAASU,OAAQE,YAE9B,GAAIA,aAAejC,cACjB,OAAOt1B,SAIT,GAAIoK,QAAQmtB,WAAY,EAAQ,KAC9B,OAAOA,WAGT,IAAIC,MAAOprC,OAEX,GAAIge,QAAQmtB,WAAY,IAAQ,MAAS,CACvCC,MAAQ,EACRprC,OAAS,SAGN,GAAIge,QAAQmtB,WAAY,KAAQ,OAAS,CAC5CC,MAAQ,EACRprC,OAAS,SAGN,GAAIge,QAAQmtB,WAAY,MAAS,SAAW,CAC/CC,MAAQ,EACRprC,OAAS,IAKX,IAAIqL,MAAQ,EAAE8/B,YAAe,EAAIC,OAAUprC,QAG3C,MAAOorC,MAAQ,EAAG,CAGhB,IAAIC,KAAOF,YAAe,GAAKC,MAAQ,GAGvC//B,MAAM9L,KAAK,IAAQ8rC,KAAO,IAG1BD,OAAS,EAIX,OAAO//B,KACR,EAGgBigC,aAAAj3B,YAAGA,YACtBi3B,aAAAxB,YAAsBA,uHChoBtB,IAAIyB,gBAAmBtoC,KAAQA,IAAKsoC,kBAAqB7oC,OAAO2Q,OAAM,SAAaymB,EAAGz5B,EAAGwe,EAAG2sB,IACxF,GAAIA,KAAOtoC,UAAWsoC,GAAK3sB,EAC3Bnc,OAAOG,eAAei3B,EAAG0R,GAAI,CAAE1oC,WAAY,KAAMC,IAAK,WAAa,OAAO1C,EAAEwe,EAAK,GACpF,EAAA,SAAcib,EAAGz5B,EAAGwe,EAAG2sB,IACpB,GAAIA,KAAOtoC,UAAWsoC,GAAK3sB,EAC3Bib,EAAE0R,IAAMnrC,EAAEwe,EACb,GACD,IAAI4sB,mBAAsBxoC,KAAQA,IAAKwoC,qBAAwB/oC,OAAO2Q,OAAM,SAAaymB,EAAGlb,GACxFlc,OAAOG,eAAei3B,EAAG,UAAW,CAAEh3B,WAAY,KAAM7B,MAAO2d,GAClE,EAAI,SAASkb,EAAGlb,GACbkb,EAAE,WAAalb,CACnB,GACA,IAAI8sB,WAAczoC,KAAQA,IAAKyoC,YAAe,SAAUC,WAAYxjC,OAAQ8d,IAAK2lB,MAC7E,IAAI1qC,EAAIyF,UAAUxI,OAAQsjB,EAAIvgB,EAAI,EAAIiH,OAASyjC,OAAS,KAAOA,KAAOlpC,OAAOmpC,yBAAyB1jC,OAAQ8d,KAAO2lB,KAAMlrC,EAC3H,UAAWorC,UAAY,iBAAmBA,QAAQC,WAAa,WAAYtqB,EAAIqqB,QAAQC,SAASJ,WAAYxjC,OAAQ8d,IAAK2lB,WACpH,IAAK,IAAI3tC,EAAI0tC,WAAWxtC,OAAS,EAAGF,GAAK,EAAGA,IAAK,GAAIyC,EAAIirC,WAAW1tC,GAAIwjB,GAAKvgB,EAAI,EAAIR,EAAE+gB,GAAKvgB,EAAI,EAAIR,EAAEyH,OAAQ8d,IAAKxE,GAAK/gB,EAAEyH,OAAQ8d,OAASxE,EAChJ,OAAOvgB,EAAI,GAAKugB,GAAK/e,OAAOG,eAAesF,OAAQ8d,IAAKxE,GAAIA,CAC/D,EACD,IAAIuqB,aAAgB/oC,KAAQA,IAAK+oC,cAAiB,SAAUhrB,KACxD,GAAIA,KAAOA,IAAIirB,WAAY,OAAOjrB,IAClC,IAAIC,OAAS,CAAE,EACf,GAAID,KAAO,KAAM,IAAK,IAAInC,KAAKmC,IAAK,GAAInC,IAAM,WAAanc,OAAOwpC,eAAezlC,KAAKua,IAAKnC,GAAI0sB,gBAAgBtqB,OAAQD,IAAKnC,GAC5H4sB,mBAAmBxqB,OAAQD,KAC3B,OAAOC,MACV,EACD,IAAIkrB,gBAAmBlpC,KAAQA,IAAKkpC,iBAAoB,SAAUnrB,KAC9D,OAAQA,KAAOA,IAAIirB,WAAcjrB,IAAM,CAAEorB,QAAWprB,IACvD,EACDte,OAAOG,eAAewpC,IAAS,aAAc,CAAEprC,MAAO,OACtDorC,IAAAC,qBAA+BD,IAAmBE,YAAGF,IAAiBG,UAAGH,iBAAuBA,IAAAI,aAAuBJ,IAAAK,WAAqBL,IAAkBM,WAAGN,oBAA0B,EAC3L,MAAMO,QAAUT,gBAAgBzqC,aAChC,MAAMmrC,OAASV,gBAAgBxqC,eAE/B,MAAMiD,SAAWonC,aAAac,uBAC9B,MAAMC,2BAA6BjD,cAAgB,WAAallC,SAASklC,YAAcA,YACvF,MAAMkD,YAAc,IAAID,oBAAoB,QAAS,CAAEpD,MAAO,OAC9D,SAASsD,WAAWhsC,OAChB,UAAWA,QAAU,SAAU,CAC3BA,MAAQc,OAAO4B,KAAK1C,MAAO,QAE/B,OAAO4rC,OAAOT,QAAQ93B,OAAOvS,OAAO4B,KAAK1C,QAE3BorC,IAAAY,WAAGA,WACrB,SAASN,WAAW1rC,OAChB,OAAOc,OAAO4B,KAAKkpC,OAAOT,QAAQxE,OAAO3mC,QAE3BorC,IAAAM,WAAGA,WACrB,MAAMO,eAAiB,KACvB,MAAMR,mBAAmBnuC,MACrByS,YAAYM,SACRL,MAAMK,SACNrO,KAAKkqC,UAAY,GACjBlqC,KAAKmqC,gBAAkB97B,QAE3B+7B,eAAeltB,WACXld,KAAKkqC,UAAUG,OAAO,EAAG,EAAGntB,WAE5Bld,KAAKqO,QAAUrO,KAAKmqC,gBAAkB,KAAOnqC,KAAKkqC,UAAU3tC,KAAK,MAGvD6sC,IAAAK,WAAGA,WAErB,MAAMD,aACFz7B,cACI/N,KAAKK,IAAMvB,OAAO2C,MAAMwoC,gBACxBjqC,KAAK9E,OAAS,EAElBovC,cACI,GAAItqC,KAAKK,IAAInF,OAAS,GAAK8E,KAAK9E,OAAQ,CACpC8E,KAAKK,IAAMvB,OAAOsE,OAAO,CAACpD,KAAKK,IAAKvB,OAAO2C,MAAMwoC,mBAGzDM,QAAQvsC,OACJgC,KAAKsqC,cACLtqC,KAAKK,IAAIiL,WAAWtN,MAAOgC,KAAK9E,QAChC8E,KAAK9E,QAAU,EAEnBsvC,SAASxsC,OACLgC,KAAKsqC,cACLtqC,KAAKK,IAAImL,cAAcxN,MAAOgC,KAAK9E,QACnC8E,KAAK9E,QAAU,EAEnBuvC,SAASzsC,OACLgC,KAAKsqC,cACLtqC,KAAKK,IAAIuL,cAAc5N,MAAOgC,KAAK9E,QACnC8E,KAAK9E,QAAU,EAEnBwvC,SAAS1sC,OACLgC,KAAKsqC,cACLtqC,KAAK2qC,YAAY7rC,OAAO4B,KAAK,IAAIipC,QAAQR,QAAQnrC,OAAO4zB,QAAQ,KAAM,KAE1EgZ,UAAU5sC,OACNgC,KAAKsqC,cACLtqC,KAAK2qC,YAAY7rC,OAAO4B,KAAK,IAAIipC,QAAQR,QAAQnrC,OAAO4zB,QAAQ,KAAM,MAE1EiZ,UAAU7sC,OACNgC,KAAKsqC,cACLtqC,KAAK2qC,YAAY7rC,OAAO4B,KAAK,IAAIipC,QAAQR,QAAQnrC,OAAO4zB,QAAQ,KAAM,MAE1EkZ,UAAU9sC,OACNgC,KAAKsqC,cACLtqC,KAAK2qC,YAAY7rC,OAAO4B,KAAK,IAAIipC,QAAQR,QAAQnrC,OAAO4zB,QAAQ,KAAM,MAE1E+Y,YAAY7tC,QAERkD,KAAKK,IAAMvB,OAAOsE,OAAO,CACrBtE,OAAO4B,KAAKV,KAAKK,IAAIiI,SAAS,EAAGtI,KAAK9E,SACtC4B,OACAgC,OAAO2C,MAAMwoC,kBAEjBjqC,KAAK9E,QAAU4B,OAAO5B,OAE1B6vC,YAAYjmC,KACR9E,KAAKsqC,cACL,MAAMlpC,EAAItC,OAAO4B,KAAKoE,IAAK,QAC3B9E,KAAKyqC,SAASrpC,EAAElG,QAChB8E,KAAK2qC,YAAYvpC,GAErB4pC,gBAAgB7oC,OACZnC,KAAK2qC,YAAY7rC,OAAO4B,KAAKyB,QAEjC8oC,WAAW9oC,MAAOwN,IACd3P,KAAKsqC,cACLtqC,KAAKyqC,SAAStoC,MAAMjH,QACpB,IAAK,MAAMgwC,QAAQ/oC,MAAO,CACtBnC,KAAKsqC,cACL36B,GAAGu7B,OAGXtZ,UACI,OAAO5xB,KAAKK,IAAIiI,SAAS,EAAGtI,KAAK9E,SAGrBkuC,IAAAI,aAAGA,aACvB,SAAS2B,mBAAmBjmC,OAAQkmC,YAAaC,oBAC7C,MAAMC,eAAiBD,mBAAmBrtC,MAC1CqtC,mBAAmBrtC,MAAQ,YAAayf,MACpC,IACI,OAAO6tB,eAAe5mC,MAAM1E,KAAMyd,MAEtC,MAAOtgB,GACH,GAAIA,aAAaiD,WAAY,CACzB,MAAMrF,KAAOoC,EAAEpC,KACf,GAAI,CAAC,2BAA4B,oBAAoBS,QAAQT,OAAS,EAAG,CACrE,MAAM,IAAI0uC,WAAW,iDAG7B,MAAMtsC,EAEb,EAEL,MAAMouC,aACFx9B,YAAY1N,KACRL,KAAKK,IAAMA,IACXL,KAAKjD,OAAS,EAElByuC,SACI,MAAMxtC,MAAQgC,KAAKK,IAAI2I,UAAUhJ,KAAKjD,QACtCiD,KAAKjD,QAAU,EACf,OAAOiB,MAEXytC,UACI,MAAMztC,MAAQgC,KAAKK,IAAI6I,aAAalJ,KAAKjD,QACzCiD,KAAKjD,QAAU,EACf,OAAOiB,MAEX0tC,UACI,MAAM1tC,MAAQgC,KAAKK,IAAIgJ,aAAarJ,KAAKjD,QACzCiD,KAAKjD,QAAU,EACf,OAAOiB,MAEX2tC,UACI,MAAMtrC,IAAML,KAAK4rC,WAAW,GAC5B,OAAO,IAAIjC,QAAQR,QAAQ9oC,IAAK,MAEpCwrC,WACI,MAAMxrC,IAAML,KAAK4rC,WAAW,IAC5B,OAAO,IAAIjC,QAAQR,QAAQ9oC,IAAK,MAEpCyrC,WACI,MAAMzrC,IAAML,KAAK4rC,WAAW,IAC5B,OAAO,IAAIjC,QAAQR,QAAQ9oC,IAAK,MAEpC0rC,WACI,MAAM1rC,IAAML,KAAK4rC,WAAW,IAC5B,OAAO,IAAIjC,QAAQR,QAAQ9oC,IAAK,MAEpCurC,WAAW3wC,KACP,GAAI+E,KAAKjD,OAAS9B,IAAM+E,KAAKK,IAAInF,OAAQ,CACrC,MAAM,IAAIuuC,WAAW,0BAA0BxuC,2BAEnD,MAAM+iB,OAAShe,KAAKK,IAAI4B,MAAMjC,KAAKjD,OAAQiD,KAAKjD,OAAS9B,KACzD+E,KAAKjD,QAAU9B,IACf,OAAO+iB,OAEXguB,aACI,MAAM/wC,IAAM+E,KAAK0rC,UACjB,MAAMrrC,IAAML,KAAK4rC,WAAW3wC,KAC5B,IAEI,OAAO8uC,YAAYpF,OAAOtkC,KAE9B,MAAOlD,GACH,MAAM,IAAIssC,WAAW,gCAAgCtsC,MAG7D8uC,eAAehxC,KACX,OAAO,IAAIJ,WAAWmF,KAAK4rC,WAAW3wC,MAE1CixC,UAAUv8B,IACN,MAAM1U,IAAM+E,KAAK0rC,UACjB,MAAM1tB,OAASljB,QACf,IAAK,IAAIE,EAAI,EAAGA,EAAIC,MAAOD,EAAG,CAC1BgjB,OAAO1hB,KAAKqT,MAEhB,OAAOqO,QAGfyqB,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,SAAU,MACrC8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,UAAW,MACtC8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,UAAW,MACtC8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,UAAW,MACtC8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,WAAY,MACvC8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,WAAY,MACvC8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,WAAY,MACvC8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,aAAc,MACzC8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,iBAAkB,MAC7C8oC,WAAW,CACP0C,oBACDI,aAAa5rC,UAAW,YAAa,MACpBypC,IAAAmC,aAAGA,aACvB,SAASY,sBAAsBrqC,QAC3B,OAAOA,OAAOyhC,OAAO,GAAG6I,cAAgBtqC,OAAOG,MAAM,GAEzD,SAASoqC,eAAeC,OAAQpvB,UAAWlf,MAAOuuC,UAAWC,QACzD,IAEI,UAAWD,YAAc,SAAU,CAC/BC,OAAO,QAAQL,sBAAsBI,cAAcvuC,YAElD,GAAIuuC,qBAAqBzxC,MAAO,CACjC,UAAWyxC,UAAU,KAAO,SAAU,CAClC,GAAIvuC,MAAM9C,SAAWqxC,UAAU,GAAI,CAC/B,MAAM,IAAI9C,WAAW,kCAAkC8C,UAAU,eAAevuC,MAAM9C,gBAE1FsxC,OAAOxB,gBAAgBhtC,YAEtB,GAAIuuC,UAAUrxC,SAAW,UAAYqxC,UAAU,KAAO,SAAU,CACjE,GAAIvuC,MAAM9C,SAAWqxC,UAAU,GAAI,CAC/B,MAAM,IAAI9C,WAAW,kCAAkC8C,UAAU,eAAevuC,MAAM9C,gBAE1F,IAAK,IAAIF,EAAI,EAAGA,EAAIuxC,UAAU,GAAIvxC,IAAK,CACnCqxC,eAAeC,OAAQ,KAAMtuC,MAAMhD,GAAIuxC,UAAU,GAAIC,aAGxD,CACDA,OAAOvB,WAAWjtC,OAAQ2a,OACtB0zB,eAAeC,OAAQpvB,UAAWvE,KAAM4zB,UAAU,GAAIC,OAAO,UAIpE,GAAID,UAAUE,OAASxsC,UAAW,CACnC,OAAQssC,UAAUE,MACd,IAAK,SAAU,CACX,GAAIzuC,QAAU,MAAQA,QAAUiC,UAAW,CACvCusC,OAAOjC,QAAQ,OAEd,CACDiC,OAAOjC,QAAQ,GACf8B,eAAeC,OAAQpvB,UAAWlf,MAAOuuC,UAAU/pC,KAAMgqC,QAE7D,MAEJ,IAAK,MAAO,CACRA,OAAO/B,SAASzsC,MAAMwD,MACtBxD,MAAM+lB,SAAQ,CAACve,IAAKwd,OAChBqpB,eAAeC,OAAQpvB,UAAW8F,IAAKupB,UAAUvpB,IAAKwpB,QACtDH,eAAeC,OAAQpvB,UAAW1X,IAAK+mC,UAAUvuC,MAAOwuC,OAAO,IAEnE,MAEJ,QACI,MAAM,IAAI/C,WAAW,aAAa8C,+BAGzC,CACDG,gBAAgBJ,OAAQtuC,MAAOwuC,SAGvC,MAAOltC,OACH,GAAIA,iBAAiBmqC,WAAY,CAC7BnqC,MAAM8qC,eAAeltB,WAEzB,MAAM5d,OAGd,SAASotC,gBAAgBJ,OAAQhqC,IAAKkqC,QAClC,UAAWlqC,IAAIqqC,iBAAmB,WAAY,CAC1CrqC,IAAIqqC,eAAeH,QACnB,OAEJ,MAAMI,aAAeN,OAAOxsC,IAAIwC,IAAIyL,aACpC,IAAK6+B,aAAc,CACf,MAAM,IAAInD,WAAW,SAASnnC,IAAIyL,YAAYI,6BAElD,GAAIy+B,aAAaH,OAAS,SAAU,CAChCG,aAAaC,OAAOv2B,KAAI,EAAE4G,UAAWqvB,cACjCF,eAAeC,OAAQpvB,UAAW5a,IAAI4a,WAAYqvB,UAAWC,OAAO,SAGvE,GAAII,aAAaH,OAAS,OAAQ,CACnC,MAAMt+B,KAAO7L,IAAIsqC,aAAanwB,OAC9B,IAAK,IAAIqwB,IAAM,EAAGA,IAAMF,aAAaG,OAAO7xC,SAAU4xC,IAAK,CACvD,MAAO5vB,UAAWqvB,WAAaK,aAAaG,OAAOD,KACnD,GAAI5vB,YAAc/O,KAAM,CACpBq+B,OAAOjC,QAAQuC,KACfT,eAAeC,OAAQpvB,UAAW5a,IAAI4a,WAAYqvB,UAAWC,QAC7D,YAIP,CACD,MAAM,IAAI/C,WAAW,2BAA2BmD,aAAaH,YAAYnqC,IAAIyL,YAAYI,SAKjG,SAASo7B,UAAU+C,OAAQhqC,IAAK0qC,OAASxD,cACrC,MAAMgD,OAAS,IAAIQ,OACnBN,gBAAgBJ,OAAQhqC,IAAKkqC,QAC7B,OAAOA,OAAO5a,UAEDwX,IAAAG,UAAGA,UACpB,SAAS0D,iBAAiBX,OAAQpvB,UAAWqvB,UAAWW,QACpD,IACI,UAAWX,YAAc,SAAU,CAC/B,OAAOW,OAAO,OAAOf,sBAAsBI,gBAE/C,GAAIA,qBAAqBzxC,MAAO,CAC5B,UAAWyxC,UAAU,KAAO,SAAU,CAClC,OAAOW,OAAOjB,eAAeM,UAAU,SAEtC,UAAWA,UAAU,KAAO,SAAU,CACvC,MAAM1wC,IAAM,GACZ,IAAK,IAAIb,EAAI,EAAGA,EAAIuxC,UAAU,GAAIvxC,IAAK,CACnCa,IAAIS,KAAK2wC,iBAAiBX,OAAQ,KAAMC,UAAU,GAAIW,SAE1D,OAAOrxC,QAEN,CACD,OAAOqxC,OAAOhB,WAAU,IAAMe,iBAAiBX,OAAQpvB,UAAWqvB,UAAU,GAAIW,WAGxF,GAAIX,UAAUE,OAAS,SAAU,CAC7B,MAAMU,OAASD,OAAO1B,SACtB,GAAI2B,OAAQ,CACR,OAAOF,iBAAiBX,OAAQpvB,UAAWqvB,UAAU/pC,KAAM0qC,QAE/D,OAAOjtC,UAEX,GAAIssC,UAAUE,OAAS,MAAO,CAC1B,IAAIn2B,IAAM,IAAI82B,IACd,MAAMlyC,OAASgyC,OAAOxB,UACtB,IAAK,IAAI1wC,EAAI,EAAGA,EAAIE,OAAQF,IAAK,CAC7B,MAAMgoB,IAAMiqB,iBAAiBX,OAAQpvB,UAAWqvB,UAAUvpB,IAAKkqB,QAC/D,MAAM1nC,IAAMynC,iBAAiBX,OAAQpvB,UAAWqvB,UAAUvuC,MAAOkvC,QACjE52B,IAAI/S,IAAIyf,IAAKxd,KAEjB,OAAO8Q,IAEX,OAAO+2B,kBAAkBf,OAAQC,UAAWW,QAEhD,MAAO5tC,OACH,GAAIA,iBAAiBmqC,WAAY,CAC7BnqC,MAAM8qC,eAAeltB,WAEzB,MAAM5d,OAGd,SAAS+tC,kBAAkBf,OAAQgB,UAAWJ,QAC1C,UAAWI,UAAUC,mBAAqB,WAAY,CAClD,OAAOD,UAAUC,iBAAiBL,QAEtC,MAAMN,aAAeN,OAAOxsC,IAAIwtC,WAChC,IAAKV,aAAc,CACf,MAAM,IAAInD,WAAW,SAAS6D,UAAUn/B,6BAE5C,GAAIy+B,aAAaH,OAAS,SAAU,CAChC,MAAMzuB,OAAS,CAAE,EACjB,IAAK,MAAOd,UAAWqvB,aAAcD,OAAOxsC,IAAIwtC,WAAWT,OAAQ,CAC/D7uB,OAAOd,WAAa+vB,iBAAiBX,OAAQpvB,UAAWqvB,UAAWW,QAEvE,OAAO,IAAII,UAAUtvB,QAEzB,GAAI4uB,aAAaH,OAAS,OAAQ,CAC9B,MAAMK,IAAMI,OAAO1B,SACnB,GAAIsB,KAAOF,aAAaG,OAAO7xC,OAAQ,CACnC,MAAM,IAAIuuC,WAAW,eAAeqD,uBAExC,MAAO5vB,UAAWqvB,WAAaK,aAAaG,OAAOD,KACnD,MAAMU,WAAaP,iBAAiBX,OAAQpvB,UAAWqvB,UAAWW,QAClE,OAAO,IAAII,UAAU,CAAEpwB,CAACA,WAAYswB,aAExC,MAAM,IAAI/D,WAAW,2BAA2BmD,aAAaH,YAAYa,UAAUv/B,YAAYI,QAGnG,SAASm7B,YAAYgD,OAAQgB,UAAWxwC,OAAQ2wC,OAASlC,cACrD,MAAM2B,OAAS,IAAIO,OAAO3wC,QAC1B,MAAMkhB,OAASqvB,kBAAkBf,OAAQgB,UAAWJ,QACpD,GAAIA,OAAOnwC,OAASD,OAAO5B,OAAQ,CAC/B,MAAM,IAAIuuC,WAAW,cAAc3sC,OAAO5B,OAASgyC,OAAOnwC,wCAE9D,OAAOihB,OAEQorB,IAAAE,YAAGA,YAEtB,SAASD,qBAAqBiD,OAAQgB,UAAWxwC,OAAQ2wC,OAASlC,cAC9D,MAAM2B,OAAS,IAAIO,OAAO3wC,QAC1B,OAAOuwC,kBAAkBf,OAAQgB,UAAWJ,QAEhD9D,IAAAC,qBAA+BA,4DCnbxB,IAAAqE,SAAA,MAAMC,OACX5/B,YAAY6/B,YACVnuC,OAAOouC,OAAO7tC,KAAM4tC,WACtB,CAEAv8B,SACE,OAAOvS,cAAMA,OAAC4B,KAAK6oC,WAASA,UAACuE,cAAe9tC,MAC9C,CAEA6pB,cAAcnnB,MACZ,OAAO4mC,uBAAYwE,cAAe9tC,KAAM0C,KAC1C,CAEAmnB,uBAAuBnnB,MACrB,OAAO2mC,gCAAqByE,cAAe9tC,KAAM0C,KACnD,GAKK,MAAMqrC,aAAaJ,SAExB5/B,YAAY6/B,YACV5/B,MAAM4/B,YAAY5tC,KAFpBguC,KAAe,GAGb,GAAIvuC,OAAOwuC,KAAKL,YAAY1yC,SAAW,EAAG,CACxC,MAAM,IAAII,MAAM,kCAClB,CACAmE,OAAOwuC,KAAKL,YAAYt3B,KAAI0M,MAC1BhjB,KAAKguC,KAAOhrB,GAAG,GAEnB,EAGW8qB,MAAAA,cAAoC,IAAIV,mBCzB9C,MAAMc,gBAAkB,GAKxB,MAAMC,kBAAoB,GAoBjC,SAASC,gBAAgBpwC,OACvB,OAAQA,MAAwBqwC,MAAQpuC,SAC1C,CAGA,IAAIquC,uBAAyB,EAKtB,MAAMC,kBAAkBZ,SAQ7B5/B,YAAY/P,OACVgQ,MAAM,CAAA,GARRhO,KACAquC,SAAG,EAQD,GAAID,gBAAgBpwC,OAAQ,CAC1BgC,KAAKquC,IAAMrwC,MAAMqwC,GACnB,KAAO,CACL,UAAWrwC,QAAU,SAAU,CAE7B,MAAMwwC,QAAU3J,KAAKF,OAAO3mC,OAC5B,GAAIwwC,QAAQtzC,QAAUizC,kBAAmB,CACvC,MAAM,IAAI7yC,MAAM,2BAClB,CACA0E,KAAKquC,IAAM,IAAIvd,GAAG0d,QACpB,KAAO,CACLxuC,KAAKquC,IAAM,IAAIvd,GAAG9yB,MACpB,CAEA,GAAIgC,KAAKquC,IAAI9zC,aAAe4zC,kBAAmB,CAC7C,MAAM,IAAI7yC,MAAM,2BAClB,CACF,CACF,CAKAuuB,gBACE,MAAM7G,IAAM,IAAIurB,UAAUD,wBAC1BA,wBAA0B,EAC1B,OAAO,IAAIC,UAAUvrB,IAAIsN,WAC3B,CAWA1rB,OAAOgpB,WACL,OAAO5tB,KAAKquC,IAAIxO,GAAGjS,UAAUygB,IAC/B,CAKAI,WACE,OAAO5J,KAAKxzB,OAAOrR,KAAKsR,UAC1B,CAEAnK,SACE,OAAOnH,KAAKyuC,UACd,CAKAn9B,UACE,MAAMjR,IAAML,KAAKswB,WACjB,OAAO,IAAIz1B,WAAWwF,IAAIvD,OAAQuD,IAAIH,WAAYG,IAAI9F,WACxD,CAKA+1B,WACE,MAAMlvB,EAAIpB,KAAKquC,IAAIxa,YAAY/0B,cAAAA,QAC/B,GAAIsC,EAAElG,SAAWizC,kBAAmB,CAClC,OAAO/sC,CACT,CAEA,MAAMstC,QAAU5vC,cAAAA,OAAO2C,MAAM,IAC7BL,EAAEiB,KAAKqsC,QAAS,GAAKttC,EAAElG,QACvB,OAAOwzC,OACT,CAEYC,IAAP/vC,OAAO+vC,eACV,MAAO,aAAa3uC,KAAK2C,aAC3B,CAKAA,WACE,OAAO3C,KAAKyuC,UACd,CAQA5kB,4BACE+kB,cACA7yB,KACA8yB,WAEA,MAAM/xC,OAASgC,cAAMA,OAACsE,OAAO,CAC3BwrC,cAActe,WACdxxB,cAAMA,OAAC4B,KAAKqb,MACZ8yB,UAAUve,aAEZ,MAAMwe,eAAiBnJ,SAAO7oC,QAC9B,OAAO,IAAIyxC,UAAUO,eACvB,CAMAjlB,gCACEklB,MACAF,WAEA,IAAI/xC,OAASgC,cAAAA,OAAO2C,MAAM,GAC1BstC,MAAMhrB,SAAQ,SAAUhI,MACtB,GAAIA,KAAK7gB,OAASgzC,gBAAiB,CACjC,MAAM,IAAI1tC,UAAU,2BACtB,CACA1D,OAASgC,cAAMA,OAACsE,OAAO,CAACtG,OAAQwzB,SAASvU,OAC3C,IACAjf,OAASgC,cAAMA,OAACsE,OAAO,CACrBtG,OACA+xC,UAAUve,WACVxxB,cAAMA,OAAC4B,KAAK,2BAEd,MAAMouC,eAAiBnJ,SAAO7oC,QAC9B,GAAIuzB,UAAUye,gBAAiB,CAC7B,MAAM,IAAIxzC,MAAM,iDAClB,CACA,OAAO,IAAIizC,UAAUO,eACvB,CASAjlB,kCACEklB,MACAF,WAEA,OAAO7uC,KAAKgvC,yBAAyBD,MAAOF,UAC9C,CASAhlB,8BACEklB,MACAF,WAEA,IAAII,MAAQ,IACZ,IAAIC,QACJ,MAAOD,OAAS,EAAG,CACjB,IACE,MAAME,eAAiBJ,MAAM3rC,OAAOtE,cAAMA,OAAC4B,KAAK,CAACuuC,SACjDC,QAAUlvC,KAAKgvC,yBAAyBG,eAAgBN,UACzD,CAAC,MAAOO,KACP,GAAIA,eAAe5uC,UAAW,CAC5B,MAAM4uC,GACR,CACAH,QACA,QACF,CACA,MAAO,CAACC,QAASD,MACnB,CACA,MAAM,IAAI3zC,MAAM,gDAClB,CAQAuuB,gCACEklB,MACAF,WAEA,OAAO7uC,KAAKqvC,uBAAuBN,MAAOF,UAC5C,CAKAhlB,iBAAiBylB,YACf,MAAMC,OAAS,IAAIhB,UAAUe,YAC7B,OAAOjf,UAAUkf,OAAOj+B,UAC1B,EACDk+B,WA9MYjB,UAAAA,UA2CJpF,QAAqB,IAAIoF,WAAU,oCAqK5CT,cAAcvqC,IAAIgrC,UAAW,CAC3B9B,KAAM,SACNI,OAAQ,CAAC,CAAC,MAAO,WCtPZ,MAAM4C,QAcX1hC,YAAYqiB,WAbZpwB,KACQ0vC,gBAAU,EAClB1vC,KACQ2vC,gBAAU,EAWhB,GAAIvf,UAAW,CACb,MAAMwf,gBAAkBtf,SAASF,WACjC,GAAIA,UAAUl1B,SAAW,GAAI,CAC3B,MAAM,IAAII,MAAM,sBAClB,CACA0E,KAAK0vC,WAAaE,gBAAgB3tC,MAAM,GAAI,IAC5CjC,KAAK2vC,WAAaC,gBAAgB3tC,MAAM,EAAG,GAC7C,KAAO,CACLjC,KAAK2vC,WAAarf,SAASL,sBAC3BjwB,KAAK0vC,WAAapf,SAASrD,aAAajtB,KAAK2vC,YAC/C,CACF,CAKI/hB,gBACF,OAAO,IAAI2gB,UAAUvuC,KAAK0vC,WAC5B,CAOItf,gBACF,OAAOtxB,cAAMA,OAACsE,OAAO,CAACpD,KAAK2vC,WAAY3vC,KAAK0vC,YAAa,GAC3D,QCnDWG,iCAAmC,IAAItB,UAClD,mKCgIF9uC,OAAOG,eAAekwC,OAAS,aAAc,CAAE9xC,MAAO,OAC3C8xC,OAAAC,IAAGD,UAAaA,OAAAE,OAAiBF,OAAaG,MAAGH,OAAaI,MAAGJ,OAAaK,MAAGL,aAAgBA,OAAAM,MAAgBN,OAAYO,KAAGP,WAAcA,OAAAQ,IAAcR,OAAAhL,IAAcgL,OAAAS,IAAcT,OAAWU,IAAGV,UAAaA,OAAA/yC,OAAiB+yC,OAAcW,OAAGX,OAAgBY,SAAGZ,OAAYa,KAAGb,eAAkBA,OAAAc,KAAed,OAAe5I,QAAG4I,gBAAmBA,OAAAe,aAAuBf,OAAAgB,cAAwBhB,OAAAiB,MAAgBjB,OAAgCkB,yBAAGlB,0BAA6BA,OAAAmB,UAAoBnB,OAAgBoB,SAAGpB,OAAgBqB,SAAGrB,OAAcsB,OAAGtB,eAAkBA,OAAAuB,MAAgBvB,OAAmBwB,YAAGxB,iBAAoBA,OAAAyB,aAAuBzB,OAAA0B,WAAqB1B,OAAA2B,MAAgB3B,OAAW4B,IAAG5B,cAAiBA,OAAA6B,KAAe7B,OAAoB8B,aAAG9B,OAAmB+B,YAAG/B,OAAsBgC,eAAGhC,6BAAgCA,OAAAiC,iBAA2BjC,OAAAkC,OAAiBlC,OAAAmC,mBAA6BnC,OAAuBoC,qBAAQ,EACt6BpC,OAAAqC,SAAGrC,YAAeA,OAAAsC,KAAetC,OAAYuC,KAAGvC,OAAgCwC,yBAAGxC,OAAayC,MAAGzC,WAAcA,OAAArsB,KAAeqsB,OAAc0C,OAAG1C,aAAgBA,OAAA2C,IAAc3C,OAAA4C,MAAgB5C,OAAA6C,IAAc7C,OAAc8C,OAAG9C,aAAgBA,OAAA+C,MAAgB/C,OAAagD,MAAGhD,OAAaiD,MAAGjD,OAAakD,MAAGlD,YAAeA,OAAAmD,IAAcnD,OAAAoD,IAAcpD,OAAAqD,IAAcrD,OAAWsD,SAAQ,EAC1Y,MAAMC,SAAW50C,gBAIjB,SAASyzC,gBAAgB9wC,GACrB,KAAMA,aAAavG,YAAa,CAC5B,MAAM,IAAI2F,UAAU,2BAGLsvC,OAAAoC,gBAAGA,gBAI1B,SAASD,mBAAmB7wC,GACxB8wC,gBAAgB9wC,GAChB,OAAOiyC,SAASv0C,OAAO4B,KAAKU,EAAEtE,OAAQsE,EAAElB,WAAYkB,EAAElG,QAEhC40C,OAAAmC,mBAAGA,mBAiB7B,IAAAqB,SAAA,MAAMtB,OACFjkC,YAAYwlC,KAAMC,UACd,IAAKntC,OAAOqI,UAAU6kC,MAAO,CACzB,MAAM,IAAI/yC,UAAU,2BAWxBR,KAAKuzC,KAAOA,KASZvzC,KAAKwzC,SAAWA,SAiBpBC,wBACI,MAAO,CAAE,EAkBbC,QAAQtyC,EAAGrE,QACP,GAAI,EAAIiD,KAAKuzC,KAAM,CACf,MAAM,IAAInzC,WAAW,sBAEzB,OAAOJ,KAAKuzC,KAkBhBI,UAAUH,UACN,MAAMI,GAAKn0C,OAAO2Q,OAAOpQ,KAAK+N,YAAYpO,WAC1CF,OAAOouC,OAAO+F,GAAI5zC,MAClB4zC,GAAGJ,SAAWA,SACd,OAAOI,GAsBXC,UAAU9G,QACN,OAAO9sC,YAGD6vC,OAAAkC,OAAGA,SAMjB,SAASD,iBAAiB5jC,KAAMrE,IAC5B,GAAIA,GAAG0pC,SAAU,CACb,OAAOrlC,KAAO,IAAMrE,GAAG0pC,SAAW,IAEtC,OAAOrlC,KAEa2hC,OAAAiC,iBAAGA,iBA8B3B,SAAS+B,sBAAsBC,MAAOC,QAClC,GAAI,oBAAsBD,MAAO,CAC7B,MAAM,IAAIvzC,UAAU,6BAExB,GAAIf,OAAOE,UAAUspC,eAAezlC,KAAKuwC,MAAO,WAAY,CACxD,MAAM,IAAIz4C,MAAM,sCAEpB,KAAM04C,QAAWA,kBAAkBhC,UAAU,CACzC,MAAM,IAAIxxC,UAAU,2BAExB,GAAIf,OAAOE,UAAUspC,eAAezlC,KAAKwwC,OAAQ,qBAAsB,CACnE,MAAM,IAAI14C,MAAM,4CAEpBy4C,MAAME,QAAUD,OAChBA,OAAOE,kBAAoBH,MAC3BC,OAAOP,sBAAqB,IAAU,IAAIM,MAC1Ct0C,OAAOG,eAAem0C,MAAMp0C,UAAW,SAAU,CAC7C3B,MAAMoD,EAAGrE,QACL,OAAOi3C,OAAO3iC,OAAOrR,KAAMoB,EAAGrE,OACjC,EACDkR,SAAU,OAEdxO,OAAOG,eAAem0C,MAAO,SAAU,CACnC/1C,MAAMoD,EAAGrE,QACL,OAAOi3C,OAAOrP,OAAOvjC,EAAGrE,OAC3B,EACDkR,SAAU,OAGW6hC,OAAAgE,sBAAGA,sBAsBhC,MAAMhC,uBAAuBE,SAYzBmC,UACI,MAAM,IAAI74C,MAAM,+BAGFw0C,OAAAgC,eAAGA,eAgBzB,MAAMD,oBAAoBC,eACtB/jC,YAAYqmC,YAAc,EAAGZ,UACzB,IAAMntC,OAAOqI,UAAU0lC,cAAkB,GAAKA,YAAc,CACxD,MAAM,IAAI5zC,UAAU,4CAExBwN,OAAO,EAAGwlC,UAIVxzC,KAAKo0C,YAAcA,YAGvBD,UACI,OAAO,KAGXxP,OAAOvjC,EAAGrE,OAAS,GACfm1C,gBAAgB9wC,GAChB,MAAMizC,IAAMjzC,EAAElG,OAAS6B,OACvB,OAAOc,KAAKQ,MAAMg2C,IAAMr0C,KAAKo0C,aAGjC/iC,OAAO/B,IAAKlO,EAAGrE,QACX,OAAO,GAGI+yC,OAAA+B,YAAGA,YAqBtB,MAAMD,qBAAqBE,eACvB/jC,YAAYimC,OAAQj3C,OAAS,EAAGy2C,UAC5B,KAAMQ,kBAAkBhC,UAAS,CAC7B,MAAM,IAAIxxC,UAAU,2BAExB,IAAK6F,OAAOqI,UAAU3R,QAAS,CAC3B,MAAM,IAAIyD,UAAU,uCAExBwN,MAAMgmC,OAAOT,KAAMC,UAAYQ,OAAOR,UAEtCxzC,KAAKg0C,OAASA,OAOdh0C,KAAKjD,OAASA,OAGlBo3C,UACI,OAASn0C,KAAKg0C,kBAAkBrC,MACxB3xC,KAAKg0C,kBAAkBM,OAGnC3P,OAAOvjC,EAAGrE,OAAS,GACf,OAAOiD,KAAKg0C,OAAOrP,OAAOvjC,EAAGrE,OAASiD,KAAKjD,QAG/CsU,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,OAAOiD,KAAKg0C,OAAO3iC,OAAO/B,IAAKlO,EAAGrE,OAASiD,KAAKjD,SAGpC+yC,OAAA8B,aAAGA,aAiBvB,MAAMD,aAAaK,SACfjkC,YAAYwlC,KAAMC,UACdxlC,MAAMulC,KAAMC,UACZ,GAAI,EAAIxzC,KAAKuzC,KAAM,CACf,MAAM,IAAInzC,WAAW,iCAI7BukC,OAAOvjC,EAAGrE,OAAS,GACf,OAAOk1C,mBAAmB7wC,GAAGsH,WAAW3L,OAAQiD,KAAKuzC,MAGzDliC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpBk1C,mBAAmB7wC,GAAG6J,YAAYqE,IAAKvS,OAAQiD,KAAKuzC,MACpD,OAAOvzC,KAAKuzC,MAGRzD,OAAA6B,KAAGA,KAiBf,MAAM2C,eAAetC,SACjBjkC,YAAYwlC,KAAMC,UACdxlC,MAAMulC,KAAMC,UACZ,GAAI,EAAIxzC,KAAKuzC,KAAM,CACf,MAAM,IAAInzC,WAAW,iCAI7BukC,OAAOvjC,EAAGrE,OAAS,GACf,OAAOk1C,mBAAmB7wC,GAAG0H,WAAW/L,OAAQiD,KAAKuzC,MAGzDliC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpBk1C,mBAAmB7wC,GAAGgK,YAAYkE,IAAKvS,OAAQiD,KAAKuzC,MACpD,OAAOvzC,KAAKuzC,MAGNzD,OAAAwE,OAAGA,OAiBjB,MAAM5C,YAAYM,SACdjkC,YAAYwlC,KAAMC,UACdxlC,MAAMulC,KAAMC,UACZ,GAAI,EAAIxzC,KAAKuzC,KAAM,CACf,MAAM,IAAInzC,WAAW,iCAI7BukC,OAAOvjC,EAAGrE,OAAS,GACf,OAAOk1C,mBAAmB7wC,GAAG8I,UAAUnN,OAAQiD,KAAKuzC,MAGxDliC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpBk1C,mBAAmB7wC,GAAGgL,WAAWkD,IAAKvS,OAAQiD,KAAKuzC,MACnD,OAAOvzC,KAAKuzC,MAGTzD,OAAA4B,IAAGA,IAiBd,MAAMD,cAAcO,SAChBjkC,YAAYwlC,KAAMC,UACdxlC,MAAMulC,KAAMC,UACZ,GAAI,EAAIxzC,KAAKuzC,KAAM,CACf,MAAM,IAAInzC,WAAW,iCAI7BukC,OAAOvjC,EAAGrE,OAAS,GACf,OAAOk1C,mBAAmB7wC,GAAG+I,UAAUpN,OAAQiD,KAAKuzC,MAGxDliC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpBk1C,mBAAmB7wC,GAAGmL,WAAW+C,IAAKvS,OAAQiD,KAAKuzC,MACnD,OAAOvzC,KAAKuzC,MAGPzD,OAAA2B,MAAGA,MAChB,MAAM8C,MAAQ12C,KAAKC,IAAI,EAAG,IAG1B,SAAS02C,YAAYllC,KACjB,MAAMmlC,KAAO52C,KAAKQ,MAAMiR,IAAMilC,OAC9B,MAAMG,KAAOplC,IAAOmlC,KAAOF,MAC3B,MAAO,CAAEE,UAAMC,WAGnB,SAASC,aAAaF,KAAMC,MACxB,OAAOD,KAAOF,MAAQG,KAa1B,MAAMlD,mBAAmBQ,SACrBjkC,YAAYylC,UACRxlC,MAAM,EAAGwlC,UAGb7O,OAAOvjC,EAAGrE,OAAS,GACf,MAAMD,OAASm1C,mBAAmB7wC,GAClC,MAAMszC,KAAO53C,OAAOuM,aAAatM,QACjC,MAAM03C,KAAO33C,OAAOuM,aAAatM,OAAS,GAC1C,OAAO43C,aAAaF,KAAMC,MAG9BrjC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,MAAMmS,MAAQslC,YAAYllC,KAC1B,MAAMxS,OAASm1C,mBAAmB7wC,GAClCtE,OAAO8O,cAAcsD,MAAMwlC,KAAM33C,QACjCD,OAAO8O,cAAcsD,MAAMulC,KAAM13C,OAAS,GAC1C,OAAO,GAGG+yC,OAAA0B,WAAGA,WAYrB,MAAMD,qBAAqBS,SACvBjkC,YAAYylC,UACRxlC,MAAM,EAAGwlC,UAGb7O,OAAOvjC,EAAGrE,OAAS,GACf,MAAMD,OAASm1C,mBAAmB7wC,GAClC,MAAMqzC,KAAO33C,OAAOyM,aAAaxM,QACjC,MAAM23C,KAAO53C,OAAOyM,aAAaxM,OAAS,GAC1C,OAAO43C,aAAaF,KAAMC,MAG9BrjC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,MAAMmS,MAAQslC,YAAYllC,KAC1B,MAAMxS,OAASm1C,mBAAmB7wC,GAClCtE,OAAOgP,cAAcoD,MAAMulC,KAAM13C,QACjCD,OAAOgP,cAAcoD,MAAMwlC,KAAM33C,OAAS,GAC1C,OAAO,GAGK+yC,OAAAyB,aAAGA,aAYvB,MAAMqD,kBAAkB5C,SACpBjkC,YAAYylC,UACRxlC,MAAM,EAAGwlC,UAGb7O,OAAOvjC,EAAGrE,OAAS,GACf,MAAMD,OAASm1C,mBAAmB7wC,GAClC,MAAMszC,KAAO53C,OAAOuM,aAAatM,QACjC,MAAM03C,KAAO33C,OAAOyN,YAAYxN,OAAS,GACzC,OAAO43C,aAAaF,KAAMC,MAG9BrjC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,MAAMmS,MAAQslC,YAAYllC,KAC1B,MAAMxS,OAASm1C,mBAAmB7wC,GAClCtE,OAAO8O,cAAcsD,MAAMwlC,KAAM33C,QACjCD,OAAO6P,aAAauC,MAAMulC,KAAM13C,OAAS,GACzC,OAAO,GAGE+yC,OAAA8E,UAAGA,UAYpB,MAAMtD,oBAAoBU,SACtBjkC,YAAYylC,UACRxlC,MAAM,EAAGwlC,UAGb7O,OAAOvjC,EAAGrE,OAAS,GACf,MAAMD,OAASm1C,mBAAmB7wC,GAClC,MAAMqzC,KAAO33C,OAAO0N,YAAYzN,QAChC,MAAM23C,KAAO53C,OAAOyM,aAAaxM,OAAS,GAC1C,OAAO43C,aAAaF,KAAMC,MAG9BrjC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,MAAMmS,MAAQslC,YAAYllC,KAC1B,MAAMxS,OAASm1C,mBAAmB7wC,GAClCtE,OAAO8P,aAAasC,MAAMulC,KAAM13C,QAChCD,OAAOgP,cAAcoD,MAAMwlC,KAAM33C,OAAS,GAC1C,OAAO,GAGI+yC,OAAAwB,YAAGA,YAWtB,MAAMD,cAAcW,SAChBjkC,YAAYylC,UACRxlC,MAAM,EAAGwlC,UAGb7O,OAAOvjC,EAAGrE,OAAS,GACf,OAAOk1C,mBAAmB7wC,GAAGuJ,YAAY5N,QAG7CsU,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpBk1C,mBAAmB7wC,GAAG8L,aAAaoC,IAAKvS,QACxC,OAAO,GAGF+yC,OAAAuB,MAAGA,MAWhB,MAAMwD,gBAAgB7C,SAClBjkC,YAAYylC,UACRxlC,MAAM,EAAGwlC,UAGb7O,OAAOvjC,EAAGrE,OAAS,GACf,OAAOk1C,mBAAmB7wC,GAAGwJ,YAAY7N,QAG7CsU,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpBk1C,mBAAmB7wC,GAAG+L,aAAamC,IAAKvS,QACxC,OAAO,GAGA+yC,OAAA+E,QAAGA,QAWlB,MAAMzD,eAAeY,SACjBjkC,YAAYylC,UACRxlC,MAAM,EAAGwlC,UAGb7O,OAAOvjC,EAAGrE,OAAS,GACf,OAAOk1C,mBAAmB7wC,GAAGyJ,aAAa9N,QAG9CsU,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpBk1C,mBAAmB7wC,GAAGiM,cAAciC,IAAKvS,QACzC,OAAO,GAGD+yC,OAAAsB,OAAGA,OAWjB,MAAMD,iBAAiBa,SACnBjkC,YAAYylC,UACRxlC,MAAM,EAAGwlC,UAGb7O,OAAOvjC,EAAGrE,OAAS,GACf,OAAOk1C,mBAAmB7wC,GAAG0J,aAAa/N,QAG9CsU,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpBk1C,mBAAmB7wC,GAAGkM,cAAcgC,IAAKvS,QACzC,OAAO,GAGC+yC,OAAAqB,SAAGA,SAkBnB,MAAMD,iBAAiBc,SACnBjkC,YAAY+mC,cAAe3M,MAAOqL,UAC9B,KAAMsB,yBAAyB9C,UAAS,CACpC,MAAM,IAAIxxC,UAAU,kCAExB,KAAQ2nC,iBAAiB2J,gBAAmB3J,MAAMgM,WAC1C9tC,OAAOqI,UAAUy5B,QAAW,GAAKA,OAAU,CAC/C,MAAM,IAAI3nC,UAAU,sCACd,yCAEV,IAAI+yC,MAAQ,EACZ,KAAOpL,iBAAiB2J,iBAChB,EAAIgD,cAAcvB,KAAO,CAC7BA,KAAOpL,MAAQ2M,cAAcvB,KAEjCvlC,MAAMulC,KAAMC,UAEZxzC,KAAK80C,cAAgBA,cAMrB90C,KAAKmoC,MAAQA,MAGjBuL,QAAQtyC,EAAGrE,OAAS,GAChB,GAAI,GAAKiD,KAAKuzC,KAAM,CAChB,OAAOvzC,KAAKuzC,KAEhB,IAAIA,KAAO,EACX,IAAIpL,MAAQnoC,KAAKmoC,MACjB,GAAIA,iBAAiB2J,eAAgB,CACjC3J,MAAQA,MAAMxD,OAAOvjC,EAAGrE,QAE5B,GAAI,EAAIiD,KAAK80C,cAAcvB,KAAM,CAC7BA,KAAOpL,MAAQnoC,KAAK80C,cAAcvB,SAEjC,CACD,IAAIzG,IAAM,EACV,MAAOA,IAAM3E,MAAO,CAChBoL,MAAQvzC,KAAK80C,cAAcpB,QAAQtyC,EAAGrE,OAASw2C,QAC7CzG,KAGV,OAAOyG,KAGX5O,OAAOvjC,EAAGrE,OAAS,GACf,MAAM62C,GAAK,GACX,IAAI54C,EAAI,EACR,IAAImtC,MAAQnoC,KAAKmoC,MACjB,GAAIA,iBAAiB2J,eAAgB,CACjC3J,MAAQA,MAAMxD,OAAOvjC,EAAGrE,QAE5B,MAAO/B,EAAImtC,MAAO,CACdyL,GAAGt3C,KAAK0D,KAAK80C,cAAcnQ,OAAOvjC,EAAGrE,SACrCA,QAAUiD,KAAK80C,cAAcpB,QAAQtyC,EAAGrE,QACxC/B,GAAK,EAET,OAAO44C,GAYXviC,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,MAAMg4C,IAAM/0C,KAAK80C,cACjB,MAAMvB,KAAOjkC,IAAIqR,QAAO,CAAC4yB,KAAM53B,IACpB43B,KAAOwB,IAAI1jC,OAAOsK,EAAGva,EAAGrE,OAASw2C,OACzC,GACH,GAAIvzC,KAAKmoC,iBAAiB2J,eAAgB,CACtC9xC,KAAKmoC,MAAM92B,OAAO/B,IAAIpU,OAAQkG,EAAGrE,QAErC,OAAOw2C,MAGCzD,OAAAoB,SAAGA,SAiCnB,MAAMD,kBAAkBe,SACpBjkC,YAAY8+B,OAAQ2G,SAAUwB,gBAC1B,KAAMl6C,MAAM2H,QAAQoqC,SACbA,OAAOlsB,QAAO,CAACM,IAAKtF,IAAMsF,KAAQtF,aAAaq2B,UAAS,OAAQ,CACnE,MAAM,IAAIxxC,UAAU,4CAExB,GAAK,mBAAqBgzC,UAClBvzC,YAAc+0C,eAAiB,CACnCA,eAAiBxB,SACjBA,SAAWvzC,UAGf,IAAK,MAAMg1C,MAAMpI,OAAQ,CACrB,GAAK,EAAIoI,GAAG1B,MACJtzC,YAAcg1C,GAAGzB,SAAW,CAChC,MAAM,IAAIl4C,MAAM,yDAGxB,IAAIi4C,MAAQ,EACZ,IACIA,KAAO1G,OAAOlsB,QAAO,CAAC4yB,KAAM0B,KAAO1B,KAAO0B,GAAGvB,WAAW,GAE5D,MAAOv2C,IAGP6Q,MAAMulC,KAAMC,UAWZxzC,KAAK6sC,OAASA,OAUd7sC,KAAKg1C,iBAAmBA,eAG5BtB,QAAQtyC,EAAGrE,OAAS,GAChB,GAAI,GAAKiD,KAAKuzC,KAAM,CAChB,OAAOvzC,KAAKuzC,KAEhB,IAAIA,KAAO,EACX,IACIA,KAAOvzC,KAAK6sC,OAAOlsB,QAAO,CAAC4yB,KAAM0B,MAC7B,MAAMC,IAAMD,GAAGvB,QAAQtyC,EAAGrE,QAC1BA,QAAUm4C,IACV,OAAO3B,KAAO2B,GAAG,GAClB,GAEP,MAAO/3C,GACH,MAAM,IAAIiD,WAAW,sBAEzB,OAAOmzC,KAGX5O,OAAOvjC,EAAGrE,OAAS,GACfm1C,gBAAgB9wC,GAChB,MAAMuxB,KAAO3yB,KAAKyzC,wBAClB,IAAK,MAAMwB,MAAMj1C,KAAK6sC,OAAQ,CAC1B,GAAI5sC,YAAcg1C,GAAGzB,SAAU,CAC3B7gB,KAAKsiB,GAAGzB,UAAYyB,GAAGtQ,OAAOvjC,EAAGrE,QAErCA,QAAUk4C,GAAGvB,QAAQtyC,EAAGrE,QACxB,GAAIiD,KAAKg1C,gBACD5zC,EAAElG,SAAW6B,OAAS,CAC1B,OAGR,OAAO41B,KAOXthB,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,MAAMo4C,YAAcp4C,OACpB,IAAIq4C,WAAa,EACjB,IAAIC,UAAY,EAChB,IAAK,MAAMJ,MAAMj1C,KAAK6sC,OAAQ,CAC1B,IAAI0G,KAAO0B,GAAG1B,KACd8B,UAAa,EAAI9B,KAAQA,KAAO,EAChC,GAAItzC,YAAcg1C,GAAGzB,SAAU,CAC3B,MAAM8B,GAAKhmC,IAAI2lC,GAAGzB,UAClB,GAAIvzC,YAAcq1C,GAAI,CAClBD,UAAYJ,GAAG5jC,OAAOikC,GAAIl0C,EAAGrE,QAC7B,GAAI,EAAIw2C,KAAM,CAGVA,KAAO0B,GAAGvB,QAAQtyC,EAAGrE,UAIjCq4C,WAAar4C,OACbA,QAAUw2C,KAMd,OAAQ6B,WAAaC,UAAaF,YAGtCtB,UAAU9G,QACN,MAAMpa,KAAO3yB,KAAKyzC,wBAClB,IAAK,MAAMwB,MAAMj1C,KAAK6sC,OAAQ,CAC1B,GAAK5sC,YAAcg1C,GAAGzB,UACd,EAAIzG,OAAO7xC,OAAS,CACxBy3B,KAAKsiB,GAAGzB,UAAYzG,OAAO57B,SAGnC,OAAOwhB,KAUX4iB,UAAU/B,UACN,GAAI,kBAAoBA,SAAU,CAC9B,MAAM,IAAIhzC,UAAU,2BAExB,IAAK,MAAMy0C,MAAMj1C,KAAK6sC,OAAQ,CAC1B,GAAIoI,GAAGzB,WAAaA,SAAU,CAC1B,OAAOyB,IAGf,OAAOh1C,UAaXu1C,SAAShC,UACL,GAAI,kBAAoBA,SAAU,CAC9B,MAAM,IAAIhzC,UAAU,2BAExB,IAAIzD,OAAS,EACb,IAAK,MAAMk4C,MAAMj1C,KAAK6sC,OAAQ,CAC1B,GAAIoI,GAAGzB,WAAaA,SAAU,CAC1B,OAAOz2C,OAEX,GAAI,EAAIk4C,GAAG1B,KAAM,CACbx2C,QAAU,OAET,GAAI,GAAKA,OAAQ,CAClBA,QAAUk4C,GAAG1B,MAGrB,OAAOtzC,WAGE6vC,OAAAmB,UAAGA,UAepB,MAAMwE,mBACF1nC,YAAYylC,UAKRxzC,KAAKwzC,SAAWA,SAMpB7O,OAAOvjC,EAAGrE,QACN,MAAM,IAAIzB,MAAM,kCAMpB+V,OAAO/B,IAAKlO,EAAGrE,QACX,MAAM,IAAIzB,MAAM,mCAGEw0C,OAAA2F,mBAAGA,mBAkB7B,MAAMzE,iCAAiCyE,mBACnC1nC,YAAYimC,OAAQR,UAChB,KAAOQ,kBAAkBlC,gBAClBkC,OAAOG,WAAY,CACtB,MAAM,IAAI3zC,UAAU,qDAExBwN,MAAMwlC,UAAYQ,OAAOR,UAAY,WAGrCxzC,KAAKg0C,OAASA,OAGlBrP,OAAOvjC,EAAGrE,QACN,OAAOiD,KAAKg0C,OAAOrP,OAAOvjC,EAAGrE,QAGjCsU,OAAO/B,IAAKlO,EAAGrE,QACX,OAAOiD,KAAKg0C,OAAO3iC,OAAO/B,IAAKlO,EAAGrE,SAGV+yC,OAAAkB,yBAAGA,yBA4DnC,MAAMD,cAAciB,SAChBjkC,YAAY2nC,MAAOC,cAAenC,UAC9B,IAAIoC,cACJ,GAAKF,iBAAiB/D,MACd+D,iBAAiBpB,OAAS,CAC9BsB,cAAgB,IAAI5E,yBAAyB,IAAIY,aAAa8D,aAE7D,GAAKA,iBAAiB5D,gBACpB4D,MAAMvB,UAAW,CACpByB,cAAgB,IAAI5E,yBAAyB0E,YAE5C,KAAMA,iBAAiBD,oBAAqB,CAC7C,MAAM,IAAIj1C,UAAU,sCACd,qCAEL,CACDo1C,cAAgBF,MAEpB,GAAIz1C,YAAc01C,cAAe,CAC7BA,cAAgB,KAEpB,KAAO,OAASA,eACRA,yBAAyB3D,UAAU,CACvC,MAAM,IAAIxxC,UAAU,0CAExB,GAAI,OAASm1C,cAAe,CACxB,GAAI,EAAIA,cAAcpC,KAAM,CACxB,MAAM,IAAIj4C,MAAM,yCAEpB,GAAI2E,YAAc01C,cAAcnC,SAAU,CACtCmC,cAAgBA,cAAchC,UAAU,YAOhD,IAAIJ,MAAQ,EACZ,GAAIoC,cAAe,CACfpC,KAAOoC,cAAcpC,KACrB,GAAK,GAAKA,OAAWmC,iBAAiB/D,MAC9B+D,iBAAiBpB,QAAU,CAC/Bf,MAAQqC,cAAc5B,OAAOT,MAGrCvlC,MAAMulC,KAAMC,UASZxzC,KAAK41C,cAAgBA,cAMrB51C,KAAK61C,wBAA2BH,iBAAiB/D,MACzC+D,iBAAiBpB,OAQzBt0C,KAAK21C,cAAgBA,cAWrB31C,KAAK81C,SAAW,CAAE,EAElB,IAAIC,sBAAwB/1C,KAAKg2C,wBAAwBC,KAAKj2C,MAc9DA,KAAKk2C,iBAAmB,SAAU5mC,KAC9B,OAAOymC,sBAAsBzmC,IAChC,EAcDtP,KAAKm2C,uBAAyB,SAAUC,KACpCL,sBAAwBK,IAAIH,KAAKj2C,KACpC,EAGL0zC,QAAQtyC,EAAGrE,OAAS,GAChB,GAAI,GAAKiD,KAAKuzC,KAAM,CAChB,OAAOvzC,KAAKuzC,KAKhB,MAAM8C,IAAMr2C,KAAKs2C,WAAWl1C,EAAGrE,QAC/B,IAAKs5C,IAAK,CACN,MAAM,IAAI/6C,MAAM,qDAEpB,OAAO+6C,IAAI3C,QAAQtyC,EAAGrE,QA+B1Bi5C,wBAAwB1mC,KACpB,GAAI7P,OAAOE,UAAUspC,eAAezlC,KAAK8L,IAAKtP,KAAK41C,cAAcpC,UAAW,CACxE,GAAIxzC,KAAK21C,eAAiB31C,KAAK21C,cAAcnC,UACtC/zC,OAAOE,UAAUspC,eAAezlC,KAAK8L,IAAKtP,KAAK21C,cAAcnC,UAAW,CAC3E,OAAOvzC,UAEX,MAAMo2C,IAAMr2C,KAAK81C,SAASxmC,IAAItP,KAAK41C,cAAcpC,WACjD,GAAI6C,OACMA,IAAIrC,QACFqC,IAAI7C,UAAY/zC,OAAOE,UAAUspC,eAAezlC,KAAK8L,IAAK+mC,IAAI7C,WAAa,CACnF,OAAO6C,SAGV,CACD,IAAK,MAAME,OAAOv2C,KAAK81C,SAAU,CAC7B,MAAMO,IAAMr2C,KAAK81C,SAASS,KAC1B,GAAIF,IAAI7C,UAAY/zC,OAAOE,UAAUspC,eAAezlC,KAAK8L,IAAK+mC,IAAI7C,UAAW,CACzE,OAAO6C,MAInB,MAAM,IAAI/6C,MAAM,+BAQpBqpC,OAAOvjC,EAAGrE,OAAS,GACf,IAAI41B,KACJ,MAAM6jB,IAAMx2C,KAAK41C,cACjB,MAAMF,MAAQc,IAAI7R,OAAOvjC,EAAGrE,QAC5B,MAAM05C,IAAMz2C,KAAK81C,SAASJ,OAC1B,GAAIz1C,YAAcw2C,IAAK,CACnB,MAAMd,cAAgB31C,KAAK21C,cAC3B,IAAIe,cAAgB,EACpB,GAAI12C,KAAK61C,wBAAyB,CAC9Ba,cAAgBF,IAAIxC,OAAOT,KAE/B5gB,KAAO3yB,KAAKyzC,wBACZ9gB,KAAK6jB,IAAIhD,UAAYkC,MAGrB/iB,KAAKgjB,cAAcnC,UAAYmC,cAAchR,OAAOvjC,EAAGrE,OAAS25C,mBAE/D,CACD/jB,KAAO8jB,IAAI9R,OAAOvjC,EAAGrE,QAEzB,OAAO41B,KAQXthB,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,MAAMs5C,IAAMr2C,KAAKk2C,iBAAiB5mC,KAClC,GAAIrP,YAAco2C,IAAK,CACnB,MAAMG,IAAMx2C,KAAK41C,cAGjB,MAAMa,IAAMz2C,KAAK21C,cACjB,IAAIe,cAAgB,EACpB,GAAI12C,KAAK61C,wBAAyB,CAC9Ba,cAAgBF,IAAIxC,OAAOT,KAE/BiD,IAAInlC,OAAO/B,IAAIknC,IAAIhD,UAAWpyC,EAAGrE,QAGjC,OAAO25C,cAAgBD,IAAIplC,OAAO/B,IAAImnC,IAAIjD,UAAWpyC,EAAGrE,OAAS25C,eAErE,OAAOL,IAAIhlC,OAAO/B,IAAKlO,EAAGrE,QAe9B45C,WAAWC,QAAS5C,OAAQR,UACxB,MAAMI,GAAK,IAAI9C,cAAc9wC,KAAM42C,QAAS5C,OAAQR,UACpDxzC,KAAK81C,SAASc,SAAWhD,GACzB,OAAOA,GAgBX0C,WAAWO,GAAI95C,OAAS,GACpB,IAAI65C,QACJ,GAAIC,cAAch8C,WAAY,CAC1B+7C,QAAU52C,KAAK41C,cAAcjR,OAAOkS,GAAI95C,YAEvC,CACD65C,QAAUC,GAEd,OAAO72C,KAAK81C,SAASc,UAGhB9G,OAAAiB,MAAGA,MA8BhB,MAAMD,sBAAsBkB,SACxBjkC,YAAYwkC,MAAOqE,QAAS5C,OAAQR,UAChC,KAAMjB,iBAAiBxB,OAAQ,CAC3B,MAAM,IAAIvwC,UAAU,yBAExB,IAAM6F,OAAOqI,UAAUkoC,UAAc,EAAIA,QAAU,CAC/C,MAAM,IAAIp2C,UAAU,4CAExB,GAAK,kBAAoBwzC,QACjB/zC,YAAcuzC,SAAW,CAC7BA,SAAWQ,OACXA,OAAS,KAEb,GAAIA,OAAQ,CACR,KAAMA,kBAAkBhC,UAAS,CAC7B,MAAM,IAAIxxC,UAAU,2BAExB,GAAK,OAAS+xC,MAAMoD,eACZ,GAAK3B,OAAOT,MACZS,OAAOT,KAAOhB,MAAMoD,cAAcpC,KAAO,CAC7C,MAAM,IAAIj4C,MAAM,iDAEpB,GAAI,kBAAoBk4C,SAAU,CAC9B,MAAM,IAAIhzC,UAAU,wCAG5B,IAAI+yC,KAAOhB,MAAMgB,KACjB,GAAI,EAAIhB,MAAMgB,KAAM,CAChBA,KAAOS,OAASA,OAAOT,KAAO,EAC9B,GAAK,GAAKA,MAAShB,MAAMsD,wBAAyB,CAC9CtC,MAAQhB,MAAMqD,cAAc5B,OAAOT,MAG3CvlC,MAAMulC,KAAMC,UAEZxzC,KAAKuyC,MAAQA,MAIbvyC,KAAK42C,QAAUA,QAKf52C,KAAKg0C,OAASA,QAAU,KAG5BN,QAAQtyC,EAAGrE,OAAS,GAChB,GAAI,GAAKiD,KAAKuzC,KAAM,CAGhB,OAAOvzC,KAAKuzC,KAEhB,IAAImD,cAAgB,EACpB,GAAI12C,KAAKuyC,MAAMsD,wBAAyB,CACpCa,cAAgB12C,KAAKuyC,MAAMqD,cAAc5B,OAAOT,KAGpD,IAAIA,KAAO,EACX,GAAIvzC,KAAKg0C,OAAQ,CACbT,KAAOvzC,KAAKg0C,OAAON,QAAQtyC,EAAGrE,OAAS25C,eAE3C,OAAOA,cAAgBnD,KAG3B5O,OAAOvjC,EAAGrE,OAAS,GACf,MAAM41B,KAAO3yB,KAAKyzC,wBAClB,GAAIzzC,OAASA,KAAKuyC,MAAM+D,WAAWl1C,EAAGrE,QAAS,CAC3C,MAAM,IAAIzB,MAAM,oBAEpB,IAAIo7C,cAAgB,EACpB,GAAI12C,KAAKuyC,MAAMsD,wBAAyB,CACpCa,cAAgB12C,KAAKuyC,MAAMqD,cAAc5B,OAAOT,KAEpD,GAAIvzC,KAAKg0C,OAAQ,CACbrhB,KAAK3yB,KAAKwzC,UAAYxzC,KAAKg0C,OAAOrP,OAAOvjC,EAAGrE,OAAS25C,oBAEpD,GAAI12C,KAAKwzC,SAAU,CACpB7gB,KAAK3yB,KAAKwzC,UAAY,UAErB,GAAIxzC,KAAKuyC,MAAMsD,wBAAyB,CACzCljB,KAAK3yB,KAAKuyC,MAAMqD,cAAcpC,UAAYxzC,KAAK42C,QAEnD,OAAOjkB,KAGXthB,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,IAAI25C,cAAgB,EACpB,GAAI12C,KAAKuyC,MAAMsD,wBAAyB,CACpCa,cAAgB12C,KAAKuyC,MAAMqD,cAAc5B,OAAOT,KAEpD,GAAIvzC,KAAKg0C,SACAv0C,OAAOE,UAAUspC,eAAezlC,KAAK8L,IAAKtP,KAAKwzC,UAAY,CAChE,MAAM,IAAIhzC,UAAU,0BAA4BR,KAAKwzC,UAEzDxzC,KAAKuyC,MAAMqD,cAAcvkC,OAAOrR,KAAK42C,QAASx1C,EAAGrE,QACjD,IAAIw2C,KAAOmD,cACX,GAAI12C,KAAKg0C,OAAQ,CACbh0C,KAAKg0C,OAAO3iC,OAAO/B,IAAItP,KAAKwzC,UAAWpyC,EAAGrE,OAAS25C,eACnDnD,MAAQvzC,KAAKg0C,OAAON,QAAQtyC,EAAGrE,OAAS25C,eACxC,GAAK,GAAK12C,KAAKuyC,MAAMgB,MACbA,KAAOvzC,KAAKuyC,MAAMgB,KAAO,CAC7B,MAAM,IAAIj4C,MAAM,8CAGxB,OAAOi4C,KAIXM,UAAU9G,QACN,GAAI/sC,KAAKg0C,OAAQ,CACb,OAAOh0C,KAAKg0C,OAAOH,UAAU9G,QAEjC,OAAO9sC,WAGM6vC,OAAAgB,cAAGA,cAOxB,SAASgG,iBAAiBn7B,GACtB,GAAI,EAAIA,EAAG,CACPA,GAAK,WAET,OAAOA,EAiCX,MAAMk1B,qBAAqBmB,SACvBjkC,YAAYmD,KAAM6lC,IAAKvD,UACnB,KAAOtiC,gBAAgBygC,MACfzgC,gBAAgBojC,QAAU,CAC9B,MAAM,IAAI9zC,UAAU,wCAExB,GAAK,kBAAoBu2C,KACjB92C,YAAcuzC,SAAW,CAC7BA,SAAWuD,IACXA,IAAM,MAEV,GAAI,EAAI7lC,KAAKqiC,KAAM,CACf,MAAM,IAAInzC,WAAW,8BAEzB4N,MAAMkD,KAAKqiC,KAAMC,UAIjBxzC,KAAKkR,KAAOA,KAQZlR,KAAK+2C,MAAQA,IAOb/2C,KAAK6sC,OAAS,GAId,IAAI7uC,MAAQ,EACZgC,KAAKg3C,gBAAkB,SAAUr7B,GAC7B3d,MAAQ84C,iBAAiBn7B,GACzB,OAAO3b,IACV,EACDA,KAAKi3C,gBAAkB,WACnB,OAAOj5C,KACV,EAGL2mC,OAAOvjC,EAAGrE,OAAS,GACf,MAAM41B,KAAO3yB,KAAKyzC,wBAClB,MAAMz1C,MAAQgC,KAAKkR,KAAKyzB,OAAOvjC,EAAGrE,QAClCiD,KAAKg3C,gBAAgBh5C,OACrB,IAAK,MAAMi3C,MAAMj1C,KAAK6sC,OAAQ,CAC1B,GAAI5sC,YAAcg1C,GAAGzB,SAAU,CAC3B7gB,KAAKsiB,GAAGzB,UAAYyB,GAAGtQ,OAAOvjC,IAGtC,OAAOuxB,KAOXthB,OAAO/B,IAAKlO,EAAGrE,OAAS,GACpB,MAAMiB,MAAQgC,KAAKkR,KAAKyzB,OAAOvjC,EAAGrE,QAClCiD,KAAKg3C,gBAAgBh5C,OACrB,IAAK,MAAMi3C,MAAMj1C,KAAK6sC,OAAQ,CAC1B,GAAI5sC,YAAcg1C,GAAGzB,SAAU,CAC3B,MAAM8B,GAAKhmC,IAAI2lC,GAAGzB,UAClB,GAAIvzC,YAAcq1C,GAAI,CAClBL,GAAG5jC,OAAOikC,MAItB,OAAOt1C,KAAKkR,KAAKG,OAAOrR,KAAKi3C,kBAAmB71C,EAAGrE,QAWvDm6C,SAASzzB,KAAM+vB,UACX,MAAM2D,GAAK,IAAIC,SAASp3C,KAAMyjB,KAAM+vB,UACpCxzC,KAAK6sC,OAAOvwC,KAAK66C,IACjB,OAAOA,GAWXE,WAAW7D,UAEP,MAAM2D,GAAK,IAAIjQ,QAAQlnC,KAAMwzC,UAC7BxzC,KAAK6sC,OAAOvwC,KAAK66C,IACjB,OAAOA,GAUXG,SAAS9D,UACL,GAAI,kBAAoBA,SAAU,CAC9B,MAAM,IAAIhzC,UAAU,2BAExB,IAAK,MAAMy0C,MAAMj1C,KAAK6sC,OAAQ,CAC1B,GAAIoI,GAAGzB,WAAaA,SAAU,CAC1B,OAAOyB,IAGf,OAAOh1C,WAGK6vC,OAAAe,aAAGA,aAqBvB,MAAMuG,SACFrpC,YAAYwpC,UAAW9zB,KAAM+vB,UACzB,KAAM+D,qBAAqB1G,cAAe,CACtC,MAAM,IAAIrwC,UAAU,oCAExB,IAAM6F,OAAOqI,UAAU+U,OAAW,GAAKA,KAAO,CAC1C,MAAM,IAAIjjB,UAAU,iCAExB,MAAMg3C,UAAY,EAAID,UAAUhE,KAChC,MAAMkE,SAAWF,UAAU1K,OAAOlsB,QAAO,CAAClP,IAAKwjC,KAAOxjC,IAAMwjC,GAAGxxB,MAAM,GACrE,GAAKA,KAAOg0B,SAAYD,UAAW,CAC/B,MAAM,IAAIl8C,MAAM,sCACTk8C,UAAYC,UAAY,OACzBD,UAAY,YAItBx3C,KAAKu3C,UAAYA,UAEjBv3C,KAAKyjB,KAAOA,KAMZzjB,KAAK03C,WAAa,GAAKj0B,MAAQ,EAC/B,GAAI,KAAOA,KAAM,CACbzjB,KAAK03C,UAAY,WAKrB13C,KAAK7D,MAAQs7C,SACb,GAAIz3C,KAAKu3C,UAAUR,IAAK,CACpB/2C,KAAK7D,MAAQq7C,UAAYC,SAAWh0B,KAIxCzjB,KAAK23C,SAAWb,iBAAiB92C,KAAK03C,WAAa13C,KAAK7D,OAWxD6D,KAAKwzC,SAAWA,SAIpB7O,OAAOvjC,EAAGrE,QACN,MAAMmU,KAAOlR,KAAKu3C,UAAUN,kBAC5B,MAAMW,UAAYd,iBAAiB5lC,KAAOlR,KAAK23C,UAC/C,MAAM35C,MAAQ45C,YAAc53C,KAAK7D,MACjC,OAAO6B,MAOXqT,OAAOrT,OACH,GAAI,kBAAoBA,QAChBqI,OAAOqI,UAAU1Q,QACjBA,QAAU84C,iBAAiB94C,MAAQgC,KAAK03C,WAAa,CACzD,MAAM,IAAIl3C,UAAUuxC,iBAAiB,kBAAmB/xC,MAClD,wCAA0CA,KAAK03C,WAEzD,MAAMxmC,KAAOlR,KAAKu3C,UAAUN,kBAC5B,MAAMW,UAAYd,iBAAiB94C,OAASgC,KAAK7D,OACjD6D,KAAKu3C,UAAUP,gBAAgBF,iBAAiB5lC,MAAQlR,KAAK23C,UACvDC,YAGE9H,OAAAsH,SAAGA,SAkBnB,MAAMlQ,gBAAgBkQ,SAClBrpC,YAAYwpC,UAAW/D,UACnBxlC,MAAMupC,UAAW,EAAG/D,UAKxB7O,OAAOvjC,EAAGrE,QACN,QAASiR,MAAM22B,OAAOvjC,EAAGrE,QAG7BsU,OAAOrT,OACH,GAAI,mBAAqBA,MAAO,CAE5BA,OAASA,MAEbgQ,MAAMqD,OAAOrT,QAGN8xC,OAAA5I,QAAGA,QAgBlB,MAAM0J,aAAaoB,SACfjkC,YAAY7S,OAAQs4C,UAChB,KAAQt4C,kBAAkB42C,gBAAmB52C,OAAOi5C,WAC5C9tC,OAAOqI,UAAUxT,SAAY,GAAKA,QAAW,CACjD,MAAM,IAAIsF,UAAU,mCACd,yCAEV,IAAI+yC,MAAQ,EACZ,KAAMr4C,kBAAkB42C,gBAAiB,CACrCyB,KAAOr4C,OAEX8S,MAAMulC,KAAMC,UAMZxzC,KAAK9E,OAASA,OAGlBw4C,QAAQtyC,EAAGrE,QACP,IAAIw2C,KAAOvzC,KAAKuzC,KAChB,GAAI,EAAIA,KAAM,CACVA,KAAOvzC,KAAK9E,OAAOypC,OAAOvjC,EAAGrE,QAEjC,OAAOw2C,KAGX5O,OAAOvjC,EAAGrE,OAAS,GACf,IAAIw2C,KAAOvzC,KAAKuzC,KAChB,GAAI,EAAIA,KAAM,CACVA,KAAOvzC,KAAK9E,OAAOypC,OAAOvjC,EAAGrE,QAEjC,OAAOk1C,mBAAmB7wC,GAAGa,MAAMlF,OAAQA,OAASw2C,MAOxDliC,OAAO/B,IAAKlO,EAAGrE,QACX,IAAIw2C,KAAOvzC,KAAK9E,OAChB,GAAI8E,KAAK9E,kBAAkB42C,eAAgB,CACvCyB,KAAOjkC,IAAIpU,OAEf,KAAMoU,eAAezU,YAAc04C,OAASjkC,IAAIpU,QAAS,CACrD,MAAM,IAAIsF,UAAUuxC,iBAAiB,cAAe/xC,MAC9C,qBAAuBuzC,KAAO,uBAExC,GAAKx2C,OAASw2C,KAAQnyC,EAAElG,OAAQ,CAC5B,MAAM,IAAIkF,WAAW,gCAEzB,MAAMy3C,UAAY5F,mBAAmB3iC,KACrC2iC,mBAAmB7wC,GAAGrD,MAAM85C,UAAUl1C,SAAS,OAAQ5F,OAAQw2C,KAAM,OACrE,GAAIvzC,KAAK9E,kBAAkB42C,eAAgB,CACvC9xC,KAAK9E,OAAOmW,OAAOkiC,KAAMnyC,EAAGrE,QAEhC,OAAOw2C,MAGHzD,OAAAc,KAAGA,KAcf,MAAMkH,gBAAgB9F,SAClBjkC,YAAYylC,UACRxlC,OAAO,EAAGwlC,UAGdE,QAAQtyC,EAAGrE,OAAS,GAChBm1C,gBAAgB9wC,GAChB,IAAI0rC,IAAM/vC,OACV,MAAQ+vC,IAAM1rC,EAAElG,QAAY,IAAMkG,EAAE0rC,KAAO,CACvCA,KAAO,EAEX,OAAO,EAAIA,IAAM/vC,OAGrB4nC,OAAOvjC,EAAGrE,OAAS,GACf,MAAMw2C,KAAOvzC,KAAK0zC,QAAQtyC,EAAGrE,QAC7B,OAAOk1C,mBAAmB7wC,GAAGa,MAAMlF,OAAQA,OAASw2C,KAAO,GAAG5wC,SAAS,SAG3E0O,OAAO/B,IAAKlO,EAAGrE,OAAS,GAIpB,GAAI,kBAAoBuS,IAAK,CACzBA,IAAMpM,OAAOoM,KAEjB,MAAMyoC,KAAO1E,SAASv0C,OAAO4B,KAAK4O,IAAK,QACvC,MAAMikC,KAAOwE,KAAK78C,OAClB,GAAK6B,OAASw2C,KAAQnyC,EAAElG,OAAQ,CAC5B,MAAM,IAAIkF,WAAW,4BAEzB,MAAMtD,OAASm1C,mBAAmB7wC,GAClC22C,KAAK11C,KAAKvF,OAAQC,QAClBD,OAAOC,OAASw2C,MAAQ,EACxB,OAAOA,KAAO,GAGPzD,OAAAgI,QAAGA,QAoBlB,MAAMnH,aAAaqB,SACfjkC,YAAYiqC,QAASxE,UACjB,GAAK,kBAAoBwE,SAAa/3C,YAAcuzC,SAAW,CAC3DA,SAAWwE,QACXA,QAAU/3C,UAEd,GAAIA,YAAc+3C,QAAS,CACvBA,SAAW,OAEV,IAAK3xC,OAAOqI,UAAUspC,SAAU,CACjC,MAAM,IAAIx3C,UAAU,8BAExBwN,OAAO,EAAGwlC,UASVxzC,KAAKg4C,QAAUA,QAGnBtE,QAAQtyC,EAAGrE,OAAS,GAChBm1C,gBAAgB9wC,GAChB,OAAOA,EAAElG,OAAS6B,OAGtB4nC,OAAOvjC,EAAGrE,OAAS,GACf,MAAMw2C,KAAOvzC,KAAK0zC,QAAQtyC,EAAGrE,QAC7B,GAAK,GAAKiD,KAAKg4C,SACPh4C,KAAKg4C,QAAUzE,KAAO,CAC1B,MAAM,IAAInzC,WAAW,+BAEzB,OAAO6xC,mBAAmB7wC,GAAGa,MAAMlF,OAAQA,OAASw2C,MAAM5wC,SAAS,SAGvE0O,OAAO/B,IAAKlO,EAAGrE,OAAS,GAIpB,GAAI,kBAAoBuS,IAAK,CACzBA,IAAMpM,OAAOoM,KAEjB,MAAMyoC,KAAO1E,SAASv0C,OAAO4B,KAAK4O,IAAK,QACvC,MAAMikC,KAAOwE,KAAK78C,OAClB,GAAK,GAAK8E,KAAKg4C,SACPh4C,KAAKg4C,QAAUzE,KAAO,CAC1B,MAAM,IAAInzC,WAAW,+BAEzB,GAAKrD,OAASw2C,KAAQnyC,EAAElG,OAAQ,CAC5B,MAAM,IAAIkF,WAAW,4BAEzB23C,KAAK11C,KAAK4vC,mBAAmB7wC,GAAIrE,QACjC,OAAOw2C,MAGHzD,OAAAa,KAAGA,KAoBf,MAAMD,iBAAiBsB,SACnBjkC,YAAY/P,MAAOw1C,UACfxlC,MAAM,EAAGwlC,UAUTxzC,KAAKhC,MAAQA,MAGjB2mC,OAAOvjC,EAAGrE,QACN,OAAOiD,KAAKhC,MAGhBqT,OAAO/B,IAAKlO,EAAGrE,QAEX,OAAO,GAGC+yC,OAAAY,SAAGA,SAEnBZ,OAAAW,OAAkB,CAAC2D,YAAaZ,WAAa,IAAI3B,YAAYuC,YAAaZ,UAE1E1D,OAAA/yC,OAAc,CAAKi3C,OAAQj3C,OAAQy2C,WAAa,IAAI5B,aAAaoC,OAAQj3C,OAAQy2C,UAGjF1D,OAAAmI,GAAezE,UAAa,IAAI7B,KAAK,EAAG6B,UAGxC1D,OAAAU,IAAgBgD,UAAa,IAAI7B,KAAK,EAAG6B,UAGzC1D,OAAAS,IAAgBiD,UAAa,IAAI7B,KAAK,EAAG6B,UAGzC1D,OAAAhL,IAAgB0O,UAAa,IAAI7B,KAAK,EAAG6B,UAGzC1D,OAAAQ,IAAgBkD,UAAa,IAAI7B,KAAK,EAAG6B,UAGzC1D,OAAAoI,IAAgB1E,UAAa,IAAI7B,KAAK,EAAG6B,UAG7B1D,OAAAO,KAAKmD,UAAa,IAAIhC,WAAWgC,UAG7C1D,OAAAM,MAAkBoD,UAAa,IAAIc,OAAO,EAAGd,UAG7C1D,OAAAqI,MAAkB3E,UAAa,IAAIc,OAAO,EAAGd,UAG7C1D,OAAAK,MAAkBqD,UAAa,IAAIc,OAAO,EAAGd,UAG7C1D,OAAAI,MAAkBsD,UAAa,IAAIc,OAAO,EAAGd,UAG7C1D,OAAAG,MAAkBuD,UAAa,IAAIc,OAAO,EAAGd,UAG/B1D,OAAAE,OAAKwD,UAAa,IAAIjC,aAAaiC,UAGjD1D,OAAAsI,GAAe5E,UAAa,IAAI9B,IAAI,EAAG8B,UAGvC1D,OAAAC,IAAgByD,UAAa,IAAI9B,IAAI,EAAG8B,UAGxC1D,OAAAsD,IAAgBI,UAAa,IAAI9B,IAAI,EAAG8B,UAGxC1D,OAAAqD,IAAgBK,UAAa,IAAI9B,IAAI,EAAG8B,UAGxC1D,OAAAoD,IAAgBM,UAAa,IAAI9B,IAAI,EAAG8B,UAGxC1D,OAAAmD,IAAgBO,UAAa,IAAI9B,IAAI,EAAG8B,UAG5B1D,OAAAuI,KAAK7E,UAAa,IAAIoB,UAAUpB,UAG5C1D,OAAAkD,MAAkBQ,UAAa,IAAI/B,MAAM,EAAG+B,UAG5C1D,OAAAiD,MAAkBS,UAAa,IAAI/B,MAAM,EAAG+B,UAG5C1D,OAAAgD,MAAkBU,UAAa,IAAI/B,MAAM,EAAG+B,UAG5C1D,OAAA+C,MAAkBW,UAAa,IAAI/B,MAAM,EAAG+B,UAG5C1D,OAAAwI,MAAkB9E,UAAa,IAAI/B,MAAM,EAAG+B,UAG9B1D,OAAA8C,OAAKY,UAAa,IAAIlC,YAAYkC,UAErC1D,OAAA6C,IAAKa,UAAa,IAAInC,MAAMmC,UAE1B1D,OAAA4C,MAAKc,UAAa,IAAIqB,QAAQrB,UAEhC1D,OAAA2C,IAAKe,UAAa,IAAIpC,OAAOoC,UAE3B1D,OAAAyI,MAAK/E,UAAa,IAAIrC,SAASqC,UAE5C1D,OAAA0C,OAAc,CAAK3F,OAAQ2G,SAAUwB,iBAAmB,IAAI/D,UAAUpE,OAAQ2G,SAAUwB,gBAExFlF,OAAArsB,KAAY,CAAKvS,KAAM6lC,IAAKvD,WAAa,IAAI3C,aAAa3/B,KAAM6lC,IAAKvD,UAErE1D,OAAA0I,IAAW,CAAK1D,cAAe3M,MAAOqL,WAAa,IAAItC,SAAS4D,cAAe3M,MAAOqL,UAEtF1D,OAAAyC,MAAa,CAAKmD,MAAOC,cAAenC,WAAa,IAAIzC,MAAM2E,MAAOC,cAAenC,UAErF1D,OAAAwC,yBAAoC,CAAC0B,OAAQR,WAAa,IAAIxC,yBAAyBgD,OAAQR,UAE/F1D,OAAAuC,KAAgB,CAACn3C,OAAQs4C,WAAa,IAAI5C,KAAK11C,OAAQs4C,UAE3C1D,OAAAsC,KAAKoB,UAAa,IAAIsE,QAAQtE,UAE1C1D,OAAA2I,KAAgB,CAACT,QAASxE,WAAa,IAAI7C,KAAKqH,QAASxE,UAEzD1D,OAAAqC,SAAoB,CAACn0C,MAAOw1C,WAAa,IAAI9C,SAAS1yC,MAAOw1C,gEC70EhDkF,iBAAmB,KAAO,GAAK,EAErC,MAAMC,oBAAsB,IAE5B,MAAMC,0BAA4B,GCXlC,MAAMC,mDAAmDv9C,MAG9DyS,YAAY+qC,WACV9qC,MAAM,aAAa8qC,iDAAiD94C,KAHtE84C,eAAS,EAIP94C,KAAK84C,UAAYA,SACnB,EAGFr5C,OAAOG,eACLi5C,2CAA2Cl5C,UAC3C,OACA,CACE3B,MAAO,+CAIJ,MAAM+6C,uCAAuCz9C,MAGlDyS,YAAY+qC,UAAmBE,gBAC7BhrC,MACE,oCAAoCgrC,eAAeC,QACjD,qBAEA,sDACA,GAAGH,qDACL94C,KATJ84C,eAAS,EAUP94C,KAAK84C,UAAYA,SACnB,EAGFr5C,OAAOG,eAAem5C,+BAA+Bp5C,UAAW,OAAQ,CACtE3B,MAAO,mCAGF,MAAMk7C,4CAA4C59C,MAGvDyS,YAAY+qC,WACV9qC,MAAM,aAAa8qC,wDAAwD94C,KAH7E84C,eAAS,EAIP94C,KAAK84C,UAAYA,SACnB,EAGFr5C,OAAOG,eAAes5C,oCAAoCv5C,UAAW,OAAQ,CAC3E3B,MAAO,wCCvCF,MAAMm7C,mBAIXprC,YACEqrC,kBACAC,wBACAr5C,KANFo5C,uBAAiB,EAAAp5C,KACjBq5C,4BAAsB,EAMpBr5C,KAAKo5C,kBAAoBA,kBACzBp5C,KAAKq5C,uBAAyBA,sBAChC,CAEAC,cACE,MAAMA,YAAc,CAACt5C,KAAKo5C,mBAC1B,GAAIp5C,KAAKq5C,uBAAwB,CAC/BC,YAAYh9C,KAAK0D,KAAKq5C,uBAAuBprC,UAC7CqrC,YAAYh9C,KAAK0D,KAAKq5C,uBAAuBE,SAC/C,CACA,OAAOD,WACT,CAEAx5C,IAAImyB,OACF,IAAK,MAAMunB,cAAcx5C,KAAKs5C,cAAe,CAC3C,GAAIrnB,MAAQunB,WAAWt+C,OAAQ,CAC7B,OAAOs+C,WAAWvnB,MACpB,KAAO,CACLA,OAASunB,WAAWt+C,MACtB,CACF,CACA,MACF,CAEIA,aACF,OAAO8E,KAAKs5C,cAAcG,OAAOv+C,MACnC,CAEAw+C,oBACEC,cAGA,MAAMC,OAAS,IACf,GAAI55C,KAAK9E,OAAS0+C,OAAS,EAAG,CAC5B,MAAM,IAAIt+C,MAAM,wDAClB,CAEA,MAAMu+C,YAAc,IAAIzM,IACxBptC,KAAKs5C,cACFG,OACA11B,SAAQ,CAACf,IAAKiP,SACb4nB,YAAYt2C,IAAIyf,IAAIyrB,WAAYxc,MAAM,IAG1C,MAAM6nB,aAAgB92B,MACpB,MAAM+2B,SAAWF,YAAY/5C,IAAIkjB,IAAIyrB,YACrC,GAAIsL,WAAa95C,UACf,MAAM,IAAI3E,MACR,qEAEJ,OAAOy+C,QAAQ,EAGjB,OAAOJ,aAAarjC,KAAK0jC,cAChB,CACLC,eAAgBH,aAAaE,YAAYnL,WACzCqL,kBAAmBF,YAAY/L,KAAK33B,KAAI6jC,MACtCL,aAAaK,KAAK5K,UAEpB7sC,KAAMs3C,YAAYt3C,QAGxB,ECrEK,MAAMkrB,UAAYA,CAAC4lB,SAAmB,cACpC4G,cAAiB/H,KAAC,GAAImB,UAMxB,MAAMsF,UAAYA,CAACtF,SAAmB,cACpC4G,cAAiB/H,KAAC,GAAImB,UA8BxB,MAAM6G,WAAaA,CACxB7G,SAAmB,YAEnB,MAAM8G,IAAMF,cAAAA,OAOV,CACEA,cAAAA,IAAiB,UACjBA,cAAgBtV,IAAC,iBACjBsV,cAAiB/H,KAAC+H,cAAmBr9C,OAACq9C,cAAgBtV,OAAK,GAAI,UAEjE0O,UAEF,MAAM+G,QAAUD,IAAI3V,OAAOsR,KAAKqE,KAChC,MAAME,QAAUF,IAAIjpC,OAAO4kC,KAAKqE,KAEhC,MAAMG,QAAUH,IAEhBG,QAAQ9V,OAAS,CAACvjC,EAAerE,UAC/B,MAAM2F,KAAO63C,QAAQn5C,EAAGrE,QACxB,OAAO2F,KAAK,SAASC,UAAU,EAGjC83C,QAAQppC,OAAS,CAACvM,IAAa1D,EAAerE,UAC5C,MAAM2F,KAAO,CACXg4C,MAAO57C,cAAMA,OAAC4B,KAAKoE,IAAK,SAE1B,OAAO01C,QAAQ93C,KAAMtB,EAAGrE,OAAO,EAGjC09C,QAAQh5C,MAASqD,KAEbs1C,oBAAmB7G,KACnB6G,cAAAA,MAAmB7G,KACnBz0C,cAAMA,OAAC4B,KAAKoE,IAAK,QAAQ5J,OAI7B,OAAOu/C,OAAO,EAMT,MAAME,WAAaA,CAACnH,SAAmB,eACrC4G,cAAmB5H,OAKxB,CAAC5kB,UAAU,UAAWA,UAAU,eAAgB4lB,UAM7C,MAAMoH,OAASA,CAACpH,SAAmB,WACjC4G,qBAOL,CACEA,mBAAkB,iBAClBA,cAAAA,KAAkB,SAClBxsB,UAAU,cAEZ4lB,UAOG,MAAMqH,SAAWA,CAACrH,SAAmB,aACnC4G,cAAmB5H,OAQxB,CACE5kB,UAAU,cACVA,UAAU,mBACVA,UAAU,wBACVwsB,cAAAA,GAAgB,eAElB5G,UAOG,MAAMsH,0BAA4BA,CACvCtH,SAAmB,8BAEZ4G,cAAmB5H,OACxB,CACE4H,cAAAA,IAAiB,yBACjBxsB,UAAU,yCACVysB,WAAW,kCACXzsB,UAAU,kBAEZ4lB,UAIG,SAASuH,SAASv4C,KAAWqqC,QAClC,MAAMmO,aAAgBriC,OACpB,GAAIA,KAAK46B,MAAQ,EAAG,CAClB,OAAO56B,KAAK46B,IACb,MAAM,UAAW56B,KAAKlX,QAAU,WAAY,CAC3C,OAAOkX,KAAKlX,MAAMorC,OAAOl0B,KAAK66B,UAC/B,MAAM,GAAI,UAAW76B,MAAQ,kBAAmBA,KAAM,CACrD,MAAM8D,MAAQowB,OAAOl0B,KAAK66B,UAC1B,GAAI14C,MAAM2H,QAAQga,OAAQ,CACxB,OAAOA,MAAMvhB,OAAS8/C,aAAariC,KAAKm8B,cAC1C,CACF,MAAO,GAAI,WAAYn8B,KAAM,CAE3B,OAAOoiC,SAAS,CAAC/G,OAAQr7B,MAAOk0B,OAAOl0B,KAAK66B,UAC9C,CAEA,OAAO,CAAC,EAGV,IAAI/xC,MAAQ,EACZe,KAAKwxC,OAAOnH,OAAO9oB,SAASpL,OAC1BlX,OAASu5C,aAAariC,KAAK,IAG7B,OAAOlX,KACT,CC3LO,SAASw5C,aAAa7yC,OAC3B,IAAInN,IAAM,EACV,IAAIuG,KAAO,EACX,OAAS,CACP,IAAI0pC,KAAO9iC,MAAM+I,QACjBlW,MAAQiwC,KAAO,MAAU1pC,KAAO,EAChCA,MAAQ,EACR,IAAK0pC,KAAO,OAAU,EAAG,CACvB,KACF,CACF,CACA,OAAOjwC,GACT,CAEO,SAASigD,aAAa9yC,MAAsBnN,KACjD,IAAIkgD,QAAUlgD,IACd,OAAS,CACP,IAAIiwC,KAAOiQ,QAAU,IACrBA,UAAY,EACZ,GAAIA,SAAW,EAAG,CAChB/yC,MAAM9L,KAAK4uC,MACX,KACF,KAAO,CACLA,MAAQ,IACR9iC,MAAM9L,KAAK4uC,KACb,CACF,CACF,CC3Be,SAAAkQ,SACb/3B,UACAhV,SAEA,IAAKgV,UAAW,CACd,MAAM,IAAI/nB,MAAM+S,SAAW,mBAC7B,CACF,CCQO,MAAMgtC,aAIXttC,YAAYutC,MAAkBC,YAAwBv7C,KAHtDs7C,WAAK,EAAAt7C,KACLu7C,gBAAU,EAGRv7C,KAAKs7C,MAAQA,MACbt7C,KAAKu7C,WAAaA,UACpB,CAEA1xB,eACE8vB,aACA2B,OAEA,MAAMC,WAAyB,IAAInO,IACnC,MAAMoO,mBAAsBjM,SAC1B,MAAML,QAAUK,OAAOd,WACvB,IAAIgN,QAAUF,WAAWz7C,IAAIovC,SAC7B,GAAIuM,UAAYx7C,UAAW,CACzBw7C,QAAU,CACRC,SAAU,MACVC,WAAY,MACZC,UAAW,OAEbL,WAAWh4C,IAAI2rC,QAASuM,QAC1B,CACA,OAAOA,OAAO,EAGhB,MAAMI,aAAeL,mBAAmBF,OACxCO,aAAaH,SAAW,KACxBG,aAAaF,WAAa,KAE1B,IAAK,MAAMG,MAAMnC,aAAc,CAC7B6B,mBAAmBM,GAAGjN,WAAW+M,UAAY,KAC7C,IAAK,MAAMG,eAAeD,GAAG7N,KAAM,CACjC,MAAMwN,QAAUD,mBAAmBO,YAAYxM,QAC/CkM,QAAQC,WAAaK,YAAYL,SACjCD,QAAQE,aAAeI,YAAYJ,UACrC,CACF,CAEA,OAAO,IAAIN,aAAaC,MAAOC,WACjC,CAEAS,uBACE,MAAMC,WAAa,IAAIj8C,KAAKu7C,WAAWl+B,WACvCmT,SAAOyrB,WAAW/gD,QAAU,IAAK,2CAEjC,MAAMghD,gBAAkBD,WAAWE,QACjC,EAAC,CAAGhC,QAAUA,KAAKuB,UAAYvB,KAAKwB,aAEtC,MAAMS,gBAAkBH,WAAWE,QACjC,EAAIhC,CAAAA,QAAUA,KAAKuB,WAAavB,KAAKwB,aAEvC,MAAMU,mBAAqBJ,WAAWE,QACpC,EAAIhC,CAAAA,SAAWA,KAAKuB,UAAYvB,KAAKwB,aAEvC,MAAMW,mBAAqBL,WAAWE,QACpC,EAAIhC,CAAAA,SAAWA,KAAKuB,WAAavB,KAAKwB,aAGxC,MAAMY,OAAwB,CAC5BC,sBAAuBN,gBAAgBhhD,OAASkhD,gBAAgBlhD,OAChEuhD,0BAA2BL,gBAAgBlhD,OAC3CwhD,4BAA6BJ,mBAAmBphD,QAIlD,CACEs1B,SACE0rB,gBAAgBhhD,OAAS,EACzB,6CAEF,MAAOyhD,cAAgBT,gBAAgB,GACvC1rB,SACEmsB,eAAiB38C,KAAKs7C,MAAM7M,WAC5B,yDAEJ,CAEA,MAAM2K,kBAAoB,IACrB8C,gBAAgB5lC,KAAI,EAAE44B,WAAa,IAAIX,UAAUW,cACjDkN,gBAAgB9lC,KAAI,EAAE44B,WAAa,IAAIX,UAAUW,cACjDmN,mBAAmB/lC,KAAI,EAAE44B,WAAa,IAAIX,UAAUW,cACpDoN,mBAAmBhmC,KAAI,EAAE44B,WAAa,IAAIX,UAAUW,YAGzD,MAAO,CAACqN,OAAQnD,kBAClB,CAEAwD,mBACEC,aAEA,MAAOC,gBAAiBC,qBACtB/8C,KAAKg9C,4BACHH,YAAYnpC,MAAMupC,WAClBxB,UACGA,QAAQC,WAAaD,QAAQG,WAAaH,QAAQE,aAEzD,MAAOuB,gBAAiBC,qBACtBn9C,KAAKg9C,4BACHH,YAAYnpC,MAAMupC,WAClBxB,UACGA,QAAQC,WAAaD,QAAQG,YAAcH,QAAQE,aAI1D,GAAImB,gBAAgB5hD,SAAW,GAAKgiD,gBAAgBhiD,SAAW,EAAG,CAChE,MACF,CAEA,MAAO,CACL,CACEkiD,WAAYP,YAAY75B,IACxB85B,gCACAI,iCAEF,CACEjvC,SAAU8uC,oBACVxD,SAAU4D,qBAGhB,CAGQH,4BACNK,mBACAC,eAEA,MAAMC,mBAAqB,IAAIziD,MAC/B,MAAM0iD,YAAc,IAAI1iD,MAExB,IAAK,MAAOo0C,QAASuM,WAAYz7C,KAAKu7C,WAAWl+B,UAAW,CAC1D,GAAIigC,cAAc7B,SAAU,CAC1B,MAAMz4B,IAAM,IAAIurB,UAAUW,SAC1B,MAAMuO,iBAAmBJ,mBAAmBK,WAAUC,OACpDA,MAAM/4C,OAAOoe,OAEf,GAAIy6B,kBAAoB,EAAG,CACzBjtB,SAAOitB,iBAAmB,IAAK,mCAC/BF,mBAAmBjhD,KAAKmhD,kBACxBD,YAAYlhD,KAAK0mB,KACjBhjB,KAAKu7C,WAAWv1B,OAAOkpB,QACzB,CACF,CACF,CAEA,MAAO,CAACqO,mBAAoBC,YAC9B,ECnKF,MAAMI,4BAA8B,qCAK7B,SAASC,aAAgBxuC,WAC9B,GAAIA,UAAUnU,SAAW,EAAG,CAC1B,MAAM,IAAII,MAAMsiD,4BAClB,CACA,OAAOvuC,UAAU8B,OACnB,CAMO,SAAS2sC,cACdzuC,aACGoO,MAIH,MAAOthB,OAASshB,KAChB,GACEA,KAAKviB,SAAW,EACZiB,OAASshB,KAAK,IAAM,GAAKpO,UAAUnU,OACnCiB,OAASkT,UAAUnU,OACvB,CACA,MAAM,IAAII,MAAMsiD,4BAClB,CACA,OAAOvuC,UAAUg7B,UACX5sB,KAER,CC0BO,MAAMsgC,QAWXhwC,YAAY0P,MAAmBzd,KAV/Bu8C,YAAM,EAAAv8C,KACNg+C,iBAAW,EAAAh+C,KACXi+C,qBAAe,EAAAj+C,KACf25C,kBAAY,EAAA35C,KAEJk+C,kBAA4C,IAAI9Q,IAMtDptC,KAAKu8C,OAAS9+B,KAAK8+B,OACnBv8C,KAAKg+C,YAAcvgC,KAAKugC,YAAY1nC,KAAI6nC,SAAW,IAAI5P,UAAU4P,WACjEn+C,KAAKi+C,gBAAkBxgC,KAAKwgC,gBAC5Bj+C,KAAK25C,aAAel8B,KAAKk8B,aACzB35C,KAAK25C,aAAa51B,SAAQ+3B,IACxB97C,KAAKk+C,kBAAkB36C,IACrBu4C,GAAG7B,eACHj6C,KAAKg+C,YAAYlC,GAAG7B,kBAG1B,CAEImE,cACF,MAAO,QACT,CAEIhF,wBACF,OAAOp5C,KAAKg+C,WACd,CAEIK,2BACF,OAAOr+C,KAAK25C,aAAarjC,KACtBwlC,KAAoC,CACnC7B,eAAgB6B,GAAG7B,eACnBC,kBAAmB4B,GAAGwC,SACtB57C,KAAMmiC,KAAKF,OAAOmX,GAAGp5C,SAG3B,CAEI67C,0BACF,MAAO,EACT,CAEAC,iBACE,OAAO,IAAIrF,mBAAmBn5C,KAAKo5C,kBACrC,CAEAvvB,eAAepM,MACb,MAAMghC,aAAepD,aAAaqD,QAAQjhC,KAAKk8B,aAAcl8B,KAAKkhC,UAClE,MAAOpC,OAAQnD,mBAAqBqF,aAAazC,uBACjD,MAAMgC,YAAc,IAAI7E,mBAAmBC,mBAC3C,MAAMO,aAAeqE,YAAYtE,oBAAoBj8B,KAAKk8B,cAAcrjC,KACrEwlC,KAAyD,CACxD7B,eAAgB6B,GAAG7B,eACnBqE,SAAUxC,GAAG5B,kBACbx3C,KAAMmiC,KAAKxzB,OAAOyqC,GAAGp5C,UAGzB,OAAO,IAAIq7C,QAAQ,CACjBxB,cACAyB,YAAa5E,kBACb6E,gBAAiBxgC,KAAKwgC,gBACtBtE,2BAEJ,CAEAiF,gBAAgB3sB,OACd,OAAOA,MAAQjyB,KAAKu8C,OAAOC,qBAC7B,CAEAqC,kBAAkB5sB,OAChB,MAAM6sB,kBAAoB9+C,KAAKu8C,OAAOC,sBACtC,GAAIvqB,OAASjyB,KAAKu8C,OAAOC,sBAAuB,CAC9C,MAAMuC,qBAAuB9sB,MAAQ6sB,kBACrC,MAAME,oBAAsBh/C,KAAKg+C,YAAY9iD,OAAS4jD,kBACtD,MAAMG,4BACJD,oBAAsBh/C,KAAKu8C,OAAOG,4BACpC,OAAOqC,qBAAuBE,2BAChC,KAAO,CACL,MAAMC,0BACJJ,kBAAoB9+C,KAAKu8C,OAAOE,0BAClC,OAAOxqB,MAAQitB,yBACjB,CACF,CAEAC,YAAYltB,OACV,OAAOjyB,KAAKk+C,kBAAkBkB,IAAIntB,MACpC,CAEAotB,aACE,MAAO,IAAIr/C,KAAKk+C,kBAAkBnR,SACpC,CAEAuS,gBACE,OAAOt/C,KAAKg+C,YAAY7B,QAAO,CAACpjC,EAAGkZ,SAAWjyB,KAAKm/C,YAAYltB,QACjE,CAEAsX,YACE,MAAMgW,QAAUv/C,KAAKg+C,YAAY9iD,OAEjC,IAAIskD,SAAqB,GACzBC,aAAsBD,SAAUD,SAEhC,MAAM5F,aAAe35C,KAAK25C,aAAarjC,KAAI0jC,cACzC,MAAMsE,SAACA,SAAQrE,eAAEA,gBAAkBD,YACnC,MAAMt3C,KAAO5H,MAAM4F,KAAKmkC,KAAKF,OAAOqV,YAAYt3C,OAEhD,IAAIg9C,gBAA4B,GAChCD,aAAsBC,gBAAiBpB,SAASpjD,QAEhD,IAAIykD,UAAsB,GAC1BF,aAAsBE,UAAWj9C,KAAKxH,QAEtC,MAAO,CACL++C,8BACAyF,gBAAiB5gD,cAAAA,OAAO4B,KAAKg/C,iBAC7BE,WAAYtB,SACZuB,WAAY/gD,cAAAA,OAAO4B,KAAKi/C,WACxBj9C,UACD,IAGH,IAAIo9C,iBAA6B,GACjCL,aAAsBK,iBAAkBnG,aAAaz+C,QACrD,IAAI6kD,kBAAoBjhD,cAAAA,OAAO2C,MAAMi3C,kBACrC55C,cAAAA,OAAO4B,KAAKo/C,kBAAkBz9C,KAAK09C,mBACnC,IAAIC,wBAA0BF,iBAAiB5kD,OAE/Cy+C,aAAa51B,SAAQi2B,cACnB,MAAMiG,kBAAoB7F,cAAAA,OAQxB,CACAA,cAAenC,GAAC,kBAEhBmC,cAAAA,KACEJ,YAAY0F,gBAAgBxkD,OAC5B,mBAEFk/C,cAAAA,IACEA,cAAAA,GAAgB,YAChBJ,YAAY4F,WAAW1kD,OACvB,cAEFk/C,cAAiB/H,KAAC2H,YAAY6F,WAAW3kD,OAAQ,cACjDk/C,cAAgB5B,IACd4B,cAAenC,GAAC,aAChB+B,YAAYt3C,KAAKxH,OACjB,UAGJ,MAAMA,OAAS+kD,kBAAkB5uC,OAC/B2oC,YACA+F,kBACAC,yBAEFA,yBAA2B9kD,MAAM,IAEnC6kD,kBAAoBA,kBAAkB99C,MAAM,EAAG+9C,yBAE/C,MAAME,eAAiB9F,cAAmB5H,OASxC,CACA4H,cAAiB/H,KAAC,EAAG,yBACrB+H,cAAiB/H,KAAC,EAAG,6BACrB+H,cAAiB/H,KAAC,EAAG,+BACrB+H,cAAiB/H,KAACmN,SAAStkD,OAAQ,YACnCk/C,cAAgB5B,IAACxG,UAAiB,OAAQuN,QAAS,QACnDvN,UAAiB,qBAGnB,MAAMmO,YAAc,CAClB3D,sBAAuB19C,cAAMA,OAAC4B,KAAK,CAACV,KAAKu8C,OAAOC,wBAChDC,0BAA2B39C,cAAMA,OAAC4B,KAAK,CACrCV,KAAKu8C,OAAOE,4BAEdC,4BAA6B59C,cAAMA,OAAC4B,KAAK,CACvCV,KAAKu8C,OAAOG,8BAEd8C,SAAU1gD,cAAAA,OAAO4B,KAAK8+C,UACtBvR,KAAMjuC,KAAKg+C,YAAY1nC,KAAI0M,KAAOsN,SAAStN,IAAI1R,aAC/C2sC,gBAAiBpZ,KAAKF,OAAO3kC,KAAKi+C,kBAGpC,IAAImC,SAAWthD,cAAAA,OAAO2C,MAAM,MAC5B,MAAMvG,OAASglD,eAAe7uC,OAAO8uC,YAAaC,UAClDL,kBAAkB19C,KAAK+9C,SAAUllD,QACjC,OAAOklD,SAASn+C,MAAM,EAAG/G,OAAS6kD,kBAAkB7kD,OACtD,CAKA2uB,YAAY/sB,QAEV,IAAIuS,UAAY,IAAIvS,QAEpB,MAAM0/C,sBAAwBqB,aAAaxuC,WAC3C,GACEmtC,yBACCA,sBAAwB7D,qBACzB,CACA,MAAM,IAAIr9C,MACR,8EAEJ,CAEA,MAAMmhD,0BAA4BoB,aAAaxuC,WAC/C,MAAMqtC,4BAA8BmB,aAAaxuC,WAEjD,MAAMgxC,aAAeZ,aAAsBpwC,WAC3C,IAAI2uC,YAAc,GAClB,IAAK,IAAIhjD,EAAI,EAAGA,EAAIqlD,aAAcrlD,IAAK,CACrC,MAAMmjD,QAAUL,cAAczuC,UAAW,EAAG8+B,mBAC5C6P,YAAY1hD,KAAK,IAAIiyC,UAAUzvC,cAAMA,OAAC4B,KAAKy9C,UAC7C,CAEA,MAAMF,gBAAkBH,cAAczuC,UAAW,EAAG8+B,mBAEpD,MAAM2R,iBAAmBL,aAAsBpwC,WAC/C,IAAIsqC,aAAsC,GAC1C,IAAK,IAAI3+C,EAAI,EAAGA,EAAI8kD,iBAAkB9kD,IAAK,CACzC,MAAMi/C,eAAiB4D,aAAaxuC,WACpC,MAAMgxC,aAAeZ,aAAsBpwC,WAC3C,MAAMivC,SAAWR,cAAczuC,UAAW,EAAGgxC,cAC7C,MAAMR,WAAaJ,aAAsBpwC,WACzC,MAAMixC,UAAYxC,cAAczuC,UAAW,EAAGwwC,YAC9C,MAAMn9C,KAAOmiC,KAAKxzB,OAAOvS,cAAAA,OAAO4B,KAAK4/C,YACrC3G,aAAar9C,KAAK,CAChB29C,8BACAqE,kBACA57C,WAEJ,CAEA,MAAM69C,YAAc,CAClBhE,OAAQ,CACNC,4CACAC,oDACAC,yDAEFuB,gBAAiBpZ,KAAKxzB,OAAOvS,cAAMA,OAAC4B,KAAKu9C,kBACzCD,wBACArE,2BAGF,OAAO,IAAIoE,QAAQwC,YACrB,EC9QK,MAAMC,UAOXzyC,YAAY0P,MAAqBzd,KANjCu8C,YAAM,EAAAv8C,KACNo5C,uBAAiB,EAAAp5C,KACjBi+C,qBAAe,EAAAj+C,KACfq+C,0BAAoB,EAAAr+C,KACpBu+C,yBAAmB,EAGjBv+C,KAAKu8C,OAAS9+B,KAAK8+B,OACnBv8C,KAAKo5C,kBAAoB37B,KAAK27B,kBAC9Bp5C,KAAKi+C,gBAAkBxgC,KAAKwgC,gBAC5Bj+C,KAAKq+C,qBAAuB5gC,KAAK4gC,qBACjCr+C,KAAKu+C,oBAAsB9gC,KAAK8gC,mBAClC,CAEIH,cACF,OAAO,CACT,CAEIqC,gCACF,IAAItY,MAAQ,EACZ,IAAK,MAAMztC,UAAUsF,KAAKu+C,oBAAqB,CAC7CpW,OAASztC,OAAOwiD,gBAAgBhiD,OAASR,OAAOoiD,gBAAgB5hD,MAClE,CACA,OAAOitC,KACT,CAEAqW,eAAe/gC,MACb,IAAI47B,uBACJ,GACE57B,MACA,2BAA4BA,MAC5BA,KAAK47B,uBACL,CACA,GACEr5C,KAAKygD,2BACLhjC,KAAK47B,uBAAuBprC,SAAS/S,OACnCuiB,KAAK47B,uBAAuBE,SAASr+C,OACvC,CACA,MAAM,IAAII,MACR,8FAEJ,CACA+9C,uBAAyB57B,KAAK47B,sBAC/B,MAAM,GACL57B,MACA,+BAAgCA,MAChCA,KAAKijC,2BACL,CACArH,uBAAyBr5C,KAAK2gD,2BAC5BljC,KAAKijC,2BAER,MAAM,GAAI1gD,KAAKu+C,oBAAoBrjD,OAAS,EAAG,CAC9C,MAAM,IAAII,MACR,6EAEJ,CACA,OAAO,IAAI69C,mBACTn5C,KAAKo5C,kBACLC,uBAEJ,CAEAuF,gBAAgB3sB,OACd,OAAOA,MAAQjyB,KAAKu8C,OAAOC,qBAC7B,CAEAqC,kBAAkB5sB,OAChB,MAAM6sB,kBAAoB9+C,KAAKu8C,OAAOC,sBACtC,MAAMoE,qBAAuB5gD,KAAKo5C,kBAAkBl+C,OACpD,GAAI+2B,OAAS2uB,qBAAsB,CACjC,MAAMC,uBAAyB5uB,MAAQ2uB,qBACvC,MAAME,6BAA+B9gD,KAAKu+C,oBAAoB59B,QAC5D,CAACwnB,MAAOztC,SAAWytC,MAAQztC,OAAOoiD,gBAAgB5hD,QAClD,GAEF,OAAO2lD,uBAAyBC,4BACjC,MAAM,GAAI7uB,OAASjyB,KAAKu8C,OAAOC,sBAAuB,CACrD,MAAMuC,qBAAuB9sB,MAAQ6sB,kBACrC,MAAME,oBAAsB4B,qBAAuB9B,kBACnD,MAAMG,4BACJD,oBAAsBh/C,KAAKu8C,OAAOG,4BACpC,OAAOqC,qBAAuBE,2BAChC,KAAO,CACL,MAAMC,0BACJJ,kBAAoB9+C,KAAKu8C,OAAOE,0BAClC,OAAOxqB,MAAQitB,yBACjB,CACF,CAEAyB,2BACED,4BAEA,MAAMrH,uBAAiD,CACrDprC,SAAU,GACVsrC,SAAU,IAGZ,IAAK,MAAMwH,eAAe/gD,KAAKu+C,oBAAqB,CAClD,MAAMyC,aAAeN,2BAA2BO,MAAK9C,SACnDA,QAAQn7B,IAAIpe,OAAOm8C,YAAY3D,cAEjC,IAAK4D,aAAc,CACjB,MAAM,IAAI1lD,MACR,6DAA6DylD,YAAY3D,WAAW3O,aAExF,CAEA,IAAK,MAAMxc,SAAS8uB,YAAYjE,gBAAiB,CAC/C,GAAI7qB,MAAQ+uB,aAAattC,MAAMupC,UAAU/hD,OAAQ,CAC/Cm+C,uBAAuBprC,SAAS3R,KAC9B0kD,aAAattC,MAAMupC,UAAUhrB,OAEjC,KAAO,CACL,MAAM,IAAI32B,MACR,oCAAoC22B,iCAAiC8uB,YAAY3D,WAAW3O,aAEhG,CACF,CAEA,IAAK,MAAMxc,SAAS8uB,YAAY7D,gBAAiB,CAC/C,GAAIjrB,MAAQ+uB,aAAattC,MAAMupC,UAAU/hD,OAAQ,CAC/Cm+C,uBAAuBE,SAASj9C,KAC9B0kD,aAAattC,MAAMupC,UAAUhrB,OAEjC,KAAO,CACL,MAAM,IAAI32B,MACR,oCAAoC22B,iCAAiC8uB,YAAY3D,WAAW3O,aAEhG,CACF,CACF,CAEA,OAAO4K,sBACT,CAEAxvB,eAAepM,MACb,MAAMghC,aAAepD,aAAaqD,QAAQjhC,KAAKk8B,aAAcl8B,KAAKkhC,UAElE,MAAMJ,oBAAsB,IAAIzjD,MAChC,MAAMu+C,uBAAiD,CACrDprC,SAAU,IAAInT,MACdy+C,SAAU,IAAIz+C,OAEhB,MAAMomD,oBAAsBzjC,KAAKijC,4BAA8B,GAC/D,IAAK,MAAM7D,eAAeqE,oBAAqB,CAC7C,MAAMC,cAAgB1C,aAAa7B,mBAAmBC,aACtD,GAAIsE,gBAAkBlhD,UAAW,CAC/B,MAAOmhD,oBAAoBnzC,SAACA,SAAQsrC,SAAEA,WAAa4H,cACnD5C,oBAAoBjiD,KAAK8kD,oBACzB/H,uBAAuBprC,SAAS3R,QAAQ2R,UACxCorC,uBAAuBE,SAASj9C,QAAQi9C,SAC1C,CACF,CAEA,MAAOgD,OAAQnD,mBAAqBqF,aAAazC,uBACjD,MAAMgC,YAAc,IAAI7E,mBACtBC,kBACAC,wBAEF,MAAMgF,qBAAuBL,YAAYtE,oBACvCj8B,KAAKk8B,cAEP,OAAO,IAAI6G,UAAU,CACnBjE,cACAnD,oCACA6E,gBAAiBxgC,KAAKwgC,gBACtBI,0CACAE,yCAEJ,CAEAhV,YACE,MAAM8X,+BAAiCvmD,QACvC2kD,aACE4B,+BACArhD,KAAKo5C,kBAAkBl+C,QAGzB,MAAMomD,uBAAyBthD,KAAKuhD,wBACpC,MAAMC,0BAA4B1mD,QAClC2kD,aACE+B,0BACAxhD,KAAKq+C,qBAAqBnjD,QAG5B,MAAMumD,8BAAgCzhD,KAAK0hD,+BAC3C,MAAMC,iCAAmC7mD,QACzC2kD,aACEkC,iCACA3hD,KAAKu+C,oBAAoBrjD,QAG3B,MAAM0mD,cAAgBxH,cAAAA,OAUnB,CACDA,cAAAA,GAAgB,UAChBA,cAAmB5H,OACjB,CACE4H,cAAenC,GAAC,yBAChBmC,cAAenC,GAAC,6BAChBmC,cAAenC,GAAC,gCAElB,UAEFmC,cAAiB/H,KACfgP,+BAA+BnmD,OAC/B,2BAEFk/C,cAAgB5B,IACdxG,YACAhyC,KAAKo5C,kBAAkBl+C,OACvB,qBAEF82C,UAAiB,mBACjBoI,cAAiB/H,KAACmP,0BAA0BtmD,OAAQ,sBACpDk/C,cAAAA,KACEkH,uBAAuBpmD,OACvB,0BAEFk/C,mBACEuH,iCAAiCzmD,OACjC,6BAEFk/C,cAAAA,KACEqH,8BAA8BvmD,OAC9B,mCAIJ,MAAM2mD,kBAAoB,IAAIhnD,WAAW69C,kBACzC,MAAMoJ,yBAA2B,GAAK,EACtC,MAAMC,wBAA0BH,cAAcvwC,OAC5C,CACE0b,OAAQ+0B,yBACRvF,OAAQv8C,KAAKu8C,OACbyF,wBAAyB,IAAInnD,WAAWwmD,gCACxCjI,kBAAmBp5C,KAAKo5C,kBAAkB9iC,KAAI0M,KAAOA,IAAI1R,YACzD2sC,gBAAiBpZ,KAAKF,OAAO3kC,KAAKi+C,iBAClCgE,mBAAoB,IAAIpnD,WAAW2mD,2BACnCF,8CACAY,0BAA2B,IAAIrnD,WAC7B8mD,kCAEFF,6DAEFI,mBAEF,OAAOA,kBAAkB5/C,MAAM,EAAG8/C,wBACpC,CAEQR,wBACN,IAAIY,iBAAmB,EACvB,MAAMb,uBAAyB,IAAIzmD,WAAW69C,kBAC9C,IAAK,MAAMsB,eAAeh6C,KAAKq+C,qBAAsB,CACnD,MAAM+D,+BAAiCtnD,QACvC2kD,aACE2C,+BACApI,YAAYE,kBAAkBh/C,QAGhC,MAAMmnD,kBAAoBvnD,QAC1B2kD,aAAsB4C,kBAAmBrI,YAAYt3C,KAAKxH,QAE1D,MAAM+kD,kBAAoB7F,cAAmB5H,OAM1C,CACD4H,cAAenC,GAAC,kBAChBmC,cAAAA,KACEgI,+BAA+BlnD,OAC/B,kCAEFk/C,cAAAA,IACEA,cAAAA,KACAJ,YAAYE,kBAAkBh/C,OAC9B,qBAEFk/C,mBAAkBiI,kBAAkBnnD,OAAQ,qBAC5Ck/C,cAAAA,KAAkBJ,YAAYt3C,KAAKxH,OAAQ,UAG7CinD,kBAAoBlC,kBAAkB5uC,OACpC,CACE4oC,eAAgBD,YAAYC,eAC5BmI,+BAAgC,IAAIvnD,WAClCunD,gCAEFlI,kBAAmBF,YAAYE,kBAC/BmI,kBAAmB,IAAIxnD,WAAWwnD,mBAClC3/C,KAAMs3C,YAAYt3C,MAEpB4+C,uBACAa,iBAEJ,CAEA,OAAOb,uBAAuBr/C,MAAM,EAAGkgD,iBACzC,CAEQT,+BACN,IAAIS,iBAAmB,EACvB,MAAMV,8BAAgC,IAAI5mD,WAAW69C,kBACrD,IAAK,MAAMh+C,UAAUsF,KAAKu+C,oBAAqB,CAC7C,MAAM+D,6BAA+BxnD,QACrC2kD,aACE6C,6BACA5nD,OAAOoiD,gBAAgB5hD,QAGzB,MAAMqnD,6BAA+BznD,QACrC2kD,aACE8C,6BACA7nD,OAAOwiD,gBAAgBhiD,QAGzB,MAAMsnD,yBAA2BpI,cAAmB5H,OAMjD,CACDR,UAAiB,cACjBoI,cAAiB/H,KACfiQ,6BAA6BpnD,OAC7B,gCAEFk/C,cAAgB5B,IACd4B,cAAenC,KACfv9C,OAAOoiD,gBAAgB5hD,OACvB,mBAEFk/C,cAAAA,KACEmI,6BAA6BrnD,OAC7B,gCAEFk/C,cAAgB5B,IACd4B,cAAenC,KACfv9C,OAAOwiD,gBAAgBhiD,OACvB,qBAIJinD,kBAAoBK,yBAAyBnxC,OAC3C,CACE+rC,WAAY1iD,OAAO0iD,WAAW9rC,UAC9BgxC,6BAA8B,IAAIznD,WAChCynD,8BAEFxF,gBAAiBpiD,OAAOoiD,gBACxByF,6BAA8B,IAAI1nD,WAChC0nD,8BAEFrF,gBAAiBxiD,OAAOwiD,iBAE1BuE,8BACAU,iBAEJ,CAEA,OAAOV,8BAA8Bx/C,MAAM,EAAGkgD,iBAChD,CAEAt4B,mBAAmBg4B,mBACjB,IAAIxyC,UAAY,IAAIwyC,mBAEpB,MAAM90B,OAAS8wB,aAAaxuC,WAC5B,MAAMozC,aAAe11B,OAAS4rB,oBAC9BnoB,SACEzD,SAAW01B,aACX,0DAGF,MAAMrE,QAAUqE,aAChBjyB,SACE4tB,UAAY,EACZ,+DAA+DA,WAGjE,MAAM7B,OAAwB,CAC5BC,sBAAuBqB,aAAaxuC,WACpCotC,0BAA2BoB,aAAaxuC,WACxCqtC,4BAA6BmB,aAAaxuC,YAG5C,MAAM+pC,kBAAoB,GAC1B,MAAM4I,wBAA0BvC,aAAsBpwC,WACtD,IAAK,IAAIrU,EAAI,EAAGA,EAAIgnD,wBAAyBhnD,IAAK,CAChDo+C,kBAAkB98C,KAChB,IAAIiyC,UAAUuP,cAAczuC,UAAW,EAAG8+B,oBAE9C,CAEA,MAAM8P,gBAAkBpZ,KAAKxzB,OAC3BysC,cAAczuC,UAAW,EAAG8+B,oBAG9B,MAAM2R,iBAAmBL,aAAsBpwC,WAC/C,MAAMgvC,qBAAqD,GAC3D,IAAK,IAAIrjD,EAAI,EAAGA,EAAI8kD,iBAAkB9kD,IAAK,CACzC,MAAMi/C,eAAiB4D,aAAaxuC,WACpC,MAAMqzC,wBAA0BjD,aAAsBpwC,WACtD,MAAM6qC,kBAAoB4D,cACxBzuC,UACA,EACAqzC,yBAEF,MAAM7C,WAAaJ,aAAsBpwC,WACzC,MAAM3M,KAAO,IAAI7H,WAAWijD,cAAczuC,UAAW,EAAGwwC,aACxDxB,qBAAqB/hD,KAAK,CACxB29C,8BACAC,oCACAx3C,WAEJ,CAEA,MAAMigD,yBAA2BlD,aAAsBpwC,WACvD,MAAMkvC,oBAAmD,GACzD,IAAK,IAAIvjD,EAAI,EAAGA,EAAI2nD,yBAA0B3nD,IAAK,CACjD,MAAMoiD,WAAa,IAAI7O,UACrBuP,cAAczuC,UAAW,EAAG8+B,oBAE9B,MAAMyU,sBAAwBnD,aAAsBpwC,WACpD,MAAMytC,gBAAkBgB,cACtBzuC,UACA,EACAuzC,uBAEF,MAAMC,sBAAwBpD,aAAsBpwC,WACpD,MAAM6tC,gBAAkBY,cACtBzuC,UACA,EACAwzC,uBAEFtE,oBAAoBjiD,KAAK,CACvB8gD,sBACAN,gCACAI,iCAEJ,CAEA,OAAO,IAAIsD,UAAU,CACnBjE,cACAnD,oCACA6E,gCACAI,0CACAE,yCAEJ,ECzfK,MAAMuE,iBAAmB,CAC9BC,0BAA0BlB,mBACxB,MAAM90B,OAAS80B,kBAAkB,GACjC,MAAMY,aAAe11B,OAAS4rB,oBAG9B,GAAI8J,eAAiB11B,OAAQ,CAC3B,MAAO,QACT,CAGA,OAAO01B,YACR,EAEDnZ,YAAcuY,oBACZ,MAAMzD,QACJ0E,iBAAiBC,0BAA0BlB,mBAC7C,GAAIzD,UAAY,SAAU,CACxB,OAAOL,QAAQr9C,KAAKmhD,kBACtB,CAEA,GAAIzD,UAAY,EAAG,CACjB,OAAOoC,UAAUlX,YAAYuY,kBAC/B,KAAO,CACL,MAAM,IAAIvmD,MACR,+BAA+B8iD,2CAEnC,ICNc4E,IAAAA,2BAAAA,mBAAAA,kBAAAA,kBAAiB,wBAAA,GAAA,uBAAjBA,kBAAAA,kBAAiB,aAAA,GAAA,YAAjBA,kBAAAA,kBAAiB,aAAA,GAAA,YAAjBA,kBAAAA,kBAAiB,iBAAA,GAAA,gBAAA,OAAjBA,iBAAiB,EAAA,CAAA,GAUnC,MAAMC,kBAAoBnkD,cAAMA,OAAC2C,MAAMm3C,2BAA2Bl3C,KAAK,GAiDhE,MAAMwhD,uBAiBXn1C,YAAY2S,MAhBZ1gB,KAIAiuC,UAAI,EAEJjuC,KAGA6uC,eAAS,EAET7uC,KAGA0C,KAAe5D,qBAAO2C,MAAM,GAG1BzB,KAAK6uC,UAAYnuB,KAAKmuB,UACtB7uC,KAAKiuC,KAAOvtB,KAAKutB,KACjB,GAAIvtB,KAAKhe,KAAM,CACb1C,KAAK0C,KAAOge,KAAKhe,IACnB,CACF,CAKAyE,SACE,MAAO,CACL8mC,KAAMjuC,KAAKiuC,KAAK33B,KAAI,EAAEi5B,cAAQmM,kBAAUC,0BAAiB,CACvDpM,OAAQA,OAAOpoC,SACfu0C,kBACAC,0BAEF9M,UAAW7uC,KAAK6uC,UAAU1nC,SAC1BzE,KAAM,IAAI1C,KAAK0C,MAEnB,EAqFK,MAAMygD,YAYPrK,gBACF,GAAI94C,KAAKojD,WAAWloD,OAAS,EAAG,CAC9B,OAAO8E,KAAKojD,WAAW,GAAGtK,SAC5B,CACA,OAAO,IACT,CA8DA/qC,YACE2S,MA/EF1gB,KAIAojD,WAAyC,GAAEpjD,KAiB3CqjD,cAAQ,EAERrjD,KAGA25C,aAA8C,GAE9C35C,KAGAi+C,qBAAe,EAEfj+C,KAGAsjD,0BAAoB,EAEpBtjD,KAIAujD,eAAS,EAETvjD,KAOAwjD,yBAAmB,EAEnBxjD,KAGAyjD,cAAQ,EAERzjD,KAGA0jD,WAAK,EAuBH,IAAKhjC,KAAM,CACT,MACF,CACA,GAAIA,KAAK2iC,SAAU,CACjBrjD,KAAKqjD,SAAW3iC,KAAK2iC,QACvB,CACA,GAAI3iC,KAAK0iC,WAAY,CACnBpjD,KAAKojD,WAAa1iC,KAAK0iC,UACzB,CACA,GAAI3jD,OAAOE,UAAUspC,eAAezlC,KAAKkd,KAAM,aAAc,CAC3D,MAAMijC,eAACA,eAAcJ,UAAEA,WAAa7iC,KACpC1gB,KAAKwjD,oBAAsBG,eAC3B3jD,KAAKujD,UAAYA,SACnB,MAAO,GACL9jD,OAAOE,UAAUspC,eAAezlC,KAAKkd,KAAM,wBAC3C,CACA,MAAMkjC,UAACA,UAASN,qBAAEA,sBAChB5iC,KACF1gB,KAAKi+C,gBAAkB2F,UACvB5jD,KAAKsjD,qBAAuBA,oBAC9B,KAAO,CACL,MAAMrF,gBAACA,gBAAesF,UAAEA,WACtB7iC,KACF,GAAI6iC,UAAW,CACbvjD,KAAKujD,UAAYA,SACnB,CACAvjD,KAAKi+C,gBAAkBA,eACzB,CACF,CAKA92C,SACE,MAAO,CACL82C,gBAAiBj+C,KAAKi+C,iBAAmB,KACzCoF,SAAUrjD,KAAKqjD,SAAWrjD,KAAKqjD,SAASl8C,SAAW,KACnDo8C,UAAWvjD,KAAKujD,UACZ,CACEtU,MAAOjvC,KAAKujD,UAAUtU,MACtB4U,iBAAkB7jD,KAAKujD,UAAUM,iBAAiB18C,UAEpD,KACJwyC,aAAc35C,KAAK25C,aAAarjC,KAAI0jC,aAAeA,YAAY7yC,WAC/D28C,QAAS9jD,KAAKojD,WAAW9sC,KAAI,EAAEsX,uBACtBA,UAAUzmB,WAGvB,CAOAgO,OACK4uC,OAIH,GAAIA,MAAM7oD,SAAW,EAAG,CACtB,MAAM,IAAII,MAAM,kBAClB,CAEAyoD,MAAMhgC,SAASpL,OACb,GAAI,iBAAkBA,KAAM,CAC1B3Y,KAAK25C,aAAe35C,KAAK25C,aAAav2C,OAAOuV,KAAKghC,aACpD,MAAO,GAAI,SAAUhhC,MAAQ,cAAeA,MAAQ,SAAUA,KAAM,CAClE3Y,KAAK25C,aAAar9C,KAAKqc,KACzB,KAAO,CACL3Y,KAAK25C,aAAar9C,KAAK,IAAI4mD,uBAAuBvqC,MACpD,KAEF,OAAO3Y,IACT,CAKAgkD,iBACE,GACEhkD,KAAKyjD,UACLQ,KAAKC,UAAUlkD,KAAKmH,YAAc88C,KAAKC,UAAUlkD,KAAK0jD,OACtD,CACA,OAAO1jD,KAAKyjD,QACd,CAEA,IAAIxF,gBACJ,IAAItE,aACJ,GAAI35C,KAAKujD,UAAW,CAClBtF,gBAAkBj+C,KAAKujD,UAAUtU,MACjC,GAAIjvC,KAAK25C,aAAa,IAAM35C,KAAKujD,UAAUM,iBAAkB,CAC3DlK,aAAe,CAAC35C,KAAKujD,UAAUM,oBAAqB7jD,KAAK25C,aAC3D,KAAO,CACLA,aAAe35C,KAAK25C,YACtB,CACF,KAAO,CACLsE,gBAAkBj+C,KAAKi+C,gBACvBtE,aAAe35C,KAAK25C,YACtB,CACA,IAAKsE,gBAAiB,CACpB,MAAM,IAAI3iD,MAAM,uCAClB,CAEA,GAAIq+C,aAAaz+C,OAAS,EAAG,CAC3BmE,QAAQ8kD,KAAK,2BACf,CAEA,IAAId,SACJ,GAAIrjD,KAAKqjD,SAAU,CACjBA,SAAWrjD,KAAKqjD,QAClB,MAAO,GAAIrjD,KAAKojD,WAAWloD,OAAS,GAAK8E,KAAKojD,WAAW,GAAGx1B,UAAW,CAErEy1B,SAAWrjD,KAAKojD,WAAW,GAAGx1B,SAChC,KAAO,CACL,MAAM,IAAItyB,MAAM,iCAClB,CAEA,IAAK,IAAIN,EAAI,EAAGA,EAAI2+C,aAAaz+C,OAAQF,IAAK,CAC5C,GAAI2+C,aAAa3+C,GAAG6zC,YAAc5uC,UAAW,CAC3C,MAAM,IAAI3E,MACR,iCAAiCN,6BAErC,CACF,CAEA,MAAMqkD,WAAuB,GAC7B,MAAM+E,aAA8B,GACpCzK,aAAa51B,SAAQi2B,cACnBA,YAAY/L,KAAKlqB,SAAQg4B,cACvBqI,aAAa9nD,KAAK,IAAIy/C,aAAa,IAGrC,MAAMlN,UAAYmL,YAAYnL,UAAUlsC,WACxC,IAAK08C,WAAWl5C,SAAS0oC,WAAY,CACnCwQ,WAAW/iD,KAAKuyC,UAClB,KAIFwQ,WAAWt7B,SAAQ8qB,YACjBuV,aAAa9nD,KAAK,CAChBizC,OAAQ,IAAIhB,UAAUM,WACtB6M,SAAU,MACVC,WAAY,OACZ,IAIJ,MAAM0I,YAA6B,GACnCD,aAAargC,SAAQg4B,cACnB,MAAMuI,aAAevI,YAAYxM,OAAO5sC,WACxC,MAAM4hD,YAAcF,YAAY3G,WAAU36C,GACjCA,EAAEwsC,OAAO5sC,aAAe2hD,eAEjC,GAAIC,aAAe,EAAG,CACpBF,YAAYE,aAAa5I,WACvB0I,YAAYE,aAAa5I,YAAcI,YAAYJ,WACrD0I,YAAYE,aAAa7I,SACvB2I,YAAYE,aAAa7I,UAAYK,YAAYL,QACrD,KAAO,CACL2I,YAAY/nD,KAAKy/C,YACnB,KAIFsI,YAAYG,MAAK,SAAUzhD,EAAGC,GAC5B,GAAID,EAAE24C,WAAa14C,EAAE04C,SAAU,CAE7B,OAAO34C,EAAE24C,UAAY,EAAI,CAC3B,CACA,GAAI34C,EAAE44C,aAAe34C,EAAE24C,WAAY,CAEjC,OAAO54C,EAAE44C,YAAc,EAAI,CAC7B,CAEA,MAAMpuB,QAAU,CACdk3B,cAAe,WACfC,MAAO,OACPC,YAAa,UACbC,kBAAmB,MACnBC,QAAS,MACTC,UAAW,SAEb,OAAO/hD,EAAEwsC,OACNd,WACAsW,cAAc/hD,EAAEusC,OAAOd,WAAY,KAAMlhB,QAC9C,IAGA,MAAMy3B,cAAgBX,YAAY3G,WAAU36C,GACnCA,EAAEwsC,OAAO3qC,OAAOy+C,YAEzB,GAAI2B,eAAiB,EAAG,CACtB,MAAOC,WAAaZ,YAAYha,OAAO2a,cAAe,GACtDC,UAAUvJ,SAAW,KACrBuJ,UAAUtJ,WAAa,KACvB0I,YAAY9d,QAAQ0e,UACtB,KAAO,CACLZ,YAAY9d,QAAQ,CAClBgJ,OAAQ8T,SACR3H,SAAU,KACVC,WAAY,MAEhB,CAGA,IAAK,MAAM7C,aAAa94C,KAAKojD,WAAY,CACvC,MAAMmB,YAAcF,YAAY3G,WAAU36C,GACjCA,EAAEwsC,OAAO3qC,OAAOk0C,UAAUlrB,aAEnC,GAAI22B,aAAe,EAAG,CACpB,IAAKF,YAAYE,aAAa7I,SAAU,CACtC2I,YAAYE,aAAa7I,SAAW,KACpCr8C,QAAQ8kD,KACN,2DACE,iFACA,yFAEN,CACF,KAAO,CACL,MAAM,IAAI7oD,MAAM,mBAAmBw9C,UAAUlrB,UAAUjrB,aACzD,CACF,CAEA,IAAI65C,sBAAwB,EAC5B,IAAIC,0BAA4B,EAChC,IAAIC,4BAA8B,EAGlC,MAAMwI,WAAuB,GAC7B,MAAMC,aAAyB,GAC/Bd,YAAYtgC,SAAQ,EAAEwrB,cAAQmM,kBAAUC,0BACtC,GAAID,SAAU,CACZwJ,WAAW5oD,KAAKizC,OAAO5sC,YACvB65C,uBAAyB,EACzB,IAAKb,WAAY,CACfc,2BAA6B,CAC/B,CACF,KAAO,CACL0I,aAAa7oD,KAAKizC,OAAO5sC,YACzB,IAAKg5C,WAAY,CACfe,6BAA+B,CACjC,CACF,KAGF,MAAMsB,YAAckH,WAAW9hD,OAAO+hD,cACtC,MAAM9G,qBAA8C1E,aAAarjC,KAC/D0jC,cACE,MAAMt3C,KAACA,KAAImsC,UAAEA,WAAamL,YAC1B,MAAO,CACLC,eAAgB+D,YAAYxiD,QAAQqzC,UAAUlsC,YAC9C27C,SAAUtE,YAAY/L,KAAK33B,KAAI6jC,MAC7B6D,YAAYxiD,QAAQ2+C,KAAK5K,OAAO5sC,cAElCD,KAAMmiC,KAAKxzB,OAAO3O,MACnB,IAIL27C,qBAAqBt6B,SAAQi2B,cAC3BoL,SAAUpL,YAAYC,gBAAkB,GACxCD,YAAYsE,SAASv6B,SAAQg2B,UAAYqL,SAAUrL,UAAY,IAAG,IAGpE,OAAO,IAAIgE,QAAQ,CACjBxB,OAAQ,CACNC,4CACAC,oDACAC,yDAEFsB,wBACAC,gCACAtE,aAAc0E,sBAElB,CAKAgH,WACE,MAAMh3C,QAAUrO,KAAKgkD,iBACrB,MAAMkB,WAAa72C,QAAQ2vC,YAAY/7C,MACrC,EACAoM,QAAQkuC,OAAOC,uBAGjB,GAAIx8C,KAAKojD,WAAWloD,SAAWgqD,WAAWhqD,OAAQ,CAChD,MAAMoqD,MAAQtlD,KAAKojD,WAAWmC,OAAM,CAACC,KAAMvzB,QAClCizB,WAAWjzB,OAAOrtB,OAAO4gD,KAAK53B,aAGvC,GAAI03B,MAAO,OAAOj3C,OACpB,CAEArO,KAAKojD,WAAa8B,WAAW5uC,KAAIsX,YAAc,CAC7CkrB,UAAW,KACXlrB,wBAGF,OAAOvf,OACT,CAKAo3C,mBACE,OAAOzlD,KAAKqlD,WAAW9b,WACzB,CASAmc,sBAAsBC,YACpB,aAAcA,WAAWC,iBAAiB5lD,KAAKgkD,mBAAmBhmD,KACpE,CAYA6nD,cAAc/B,SACZ,GAAIA,QAAQ5oD,SAAW,EAAG,CACxB,MAAM,IAAII,MAAM,aAClB,CAEA,MAAMwqD,KAAO,IAAIC,IACjB/lD,KAAKojD,WAAaU,QACf3H,QAAOvuB,YACN,MAAM5K,IAAM4K,UAAUjrB,WACtB,GAAImjD,KAAK1G,IAAIp8B,KAAM,CACjB,OAAO,KACT,KAAO,CACL8iC,KAAK3wC,IAAI6N,KACT,OAAO,IACT,KAED1M,KAAIsX,YAAc,CAACkrB,UAAW,KAAMlrB,uBACzC,CAkBAN,QAAQw2B,SACN,GAAIA,QAAQ5oD,SAAW,EAAG,CACxB,MAAM,IAAII,MAAM,aAClB,CAGA,MAAMwqD,KAAO,IAAIC,IACjB,MAAMC,cAAgB,GACtB,IAAK,MAAMC,UAAUnC,QAAS,CAC5B,MAAM9gC,IAAMijC,OAAOr4B,UAAUjrB,WAC7B,GAAImjD,KAAK1G,IAAIp8B,KAAM,CACjB,QACF,KAAO,CACL8iC,KAAK3wC,IAAI6N,KACTgjC,cAAc1pD,KAAK2pD,OACrB,CACF,CAEAjmD,KAAKojD,WAAa4C,cAAc1vC,KAAI2vC,SAAW,CAC7CnN,UAAW,KACXlrB,UAAWq4B,OAAOr4B,cAGpB,MAAMvf,QAAUrO,KAAKqlD,WACrBrlD,KAAKkmD,aAAa73C,WAAY23C,cAChC,CAWAG,eAAerC,SACb,GAAIA,QAAQ5oD,SAAW,EAAG,CACxB,MAAM,IAAII,MAAM,aAClB,CAGA,MAAMwqD,KAAO,IAAIC,IACjB,MAAMC,cAAgB,GACtB,IAAK,MAAMC,UAAUnC,QAAS,CAC5B,MAAM9gC,IAAMijC,OAAOr4B,UAAUjrB,WAC7B,GAAImjD,KAAK1G,IAAIp8B,KAAM,CACjB,QACF,KAAO,CACL8iC,KAAK3wC,IAAI6N,KACTgjC,cAAc1pD,KAAK2pD,OACrB,CACF,CAEA,MAAM53C,QAAUrO,KAAKqlD,WACrBrlD,KAAKkmD,aAAa73C,WAAY23C,cAChC,CAKAE,aAAa73C,WAAqBy1C,SAChC,MAAM1D,SAAW/xC,QAAQk7B,YACzBua,QAAQ//B,SAAQkiC,SACd,MAAMnN,UAAYxrB,KAAK8yB,SAAU6F,OAAO71B,WACxCpwB,KAAKomD,cAAcH,OAAOr4B,UAAW0C,SAASwoB,WAAW,GAE7D,CAUAuN,aAAa9W,OAAmBuJ,WAC9B94C,KAAKqlD,WACLrlD,KAAKomD,cAAc7W,OAAQuJ,UAC7B,CAKAsN,cAAc7W,OAAmBuJ,WAC/BsM,SAAUtM,UAAU59C,SAAW,IAE/B,MAAM+2B,MAAQjyB,KAAKojD,WAAW1F,WAAU4I,SACtC/W,OAAO3qC,OAAO0hD,QAAQ14B,aAExB,GAAIqE,MAAQ,EAAG,CACb,MAAM,IAAI32B,MAAM,mBAAmBi0C,OAAO5sC,aAC5C,CAEA3C,KAAKojD,WAAWnxB,OAAO6mB,UAAYh6C,cAAMA,OAAC4B,KAAKo4C,UACjD,CASAyN,iBAAiBC,qBAAgC,MAC/C,MAAMC,gBAAkBzmD,KAAK0mD,4BAC3B1mD,KAAKylD,mBACLe,sBAEF,OAAQC,eACV,CAKAC,4BACEr4C,QACAm4C,sBAEA,MAAM/4C,OAAkC,CAAE,EAC1C,IAAK,MAAMqrC,UAACA,UAASlrB,UAAEA,aAAc5tB,KAAKojD,WAAY,CACpD,GAAItK,YAAc,KAAM,CACtB,GAAI0N,qBAAsB,EACvB/4C,OAAOk5C,UAAY,IAAIrqD,KAAKsxB,UAC/B,CACF,KAAO,CACL,IAAKF,OAAOorB,UAAWzqC,QAASuf,UAAUtc,WAAY,EACnD7D,OAAOm5C,UAAY,IAAItqD,KAAKsxB,UAC/B,CACF,CACF,CACA,OAAOngB,OAAOm5C,SAAWn5C,OAAOk5C,QAAUl5C,OAASxN,SACrD,CASAspC,UAAUsd,QACR,MAAML,qBAACA,qBAAoBD,iBAAEA,kBAAoB9mD,OAAOouC,OACtD,CAAC2Y,qBAAsB,KAAMD,iBAAkB,MAC/CM,QAGF,MAAMzG,SAAWpgD,KAAKylD,mBACtB,GAAIc,iBAAkB,CACpB,MAAMO,UAAY9mD,KAAK0mD,4BACrBtG,SACAoG,sBAEF,GAAIM,UAAW,CACb,IAAIC,aAAe,iCACnB,GAAID,UAAUF,QAAS,CACrBG,cAAgB,qCACdD,UAAUF,QAAQ1rD,SAAW,EAAI,GAAK,YACjC4rD,UAAUF,QAAQtwC,KAAIuK,GAAKA,EAAE4tB,aAAYlyC,KAAK,aACvD,CACA,GAAIuqD,UAAUH,QAAS,CACrBI,cAAgB,qCACdD,UAAUH,QAAQzrD,SAAW,EAAI,GAAK,YACjC4rD,UAAUH,QAAQrwC,KAAIuK,GAAKA,EAAE4tB,aAAYlyC,KAAK,aACvD,CACA,MAAM,IAAIjB,MAAMyrD,aAClB,CACF,CAEA,OAAO/mD,KAAKgnD,WAAW5G,SACzB,CAKA4G,WAAW5G,UACT,MAAMgD,WAACA,YAAcpjD,KACrB,MAAMinD,eAA2B,GACjCxH,aAAsBwH,eAAgB7D,WAAWloD,QACjD,MAAMgsD,kBACJD,eAAe/rD,OAASkoD,WAAWloD,OAAS,GAAKklD,SAASllD,OAC5D,MAAMisD,gBAAkBroD,cAAAA,OAAO2C,MAAMylD,mBACrC9B,SAAUhC,WAAWloD,OAAS,KAC9B4D,cAAMA,OAAC4B,KAAKumD,gBAAgB5kD,KAAK8kD,gBAAiB,GAClD/D,WAAWr/B,SAAQ,EAAE+0B,qBAAY7mB,SAC/B,GAAI6mB,YAAc,KAAM,CACtBsM,SAAUtM,UAAU59C,SAAW,GAAI,gCACnC4D,qBAAO4B,KAAKo4C,WAAWz2C,KACrB8kD,gBACAF,eAAe/rD,OAAS+2B,MAAQ,GAEpC,KAEFmuB,SAAS/9C,KACP8kD,gBACAF,eAAe/rD,OAASkoD,WAAWloD,OAAS,IAE9CkqD,SACE+B,gBAAgBjsD,QAAUw9C,iBAC1B,0BAA0ByO,gBAAgBjsD,YAAYw9C,oBAExD,OAAOyO,eACT,CAMIlZ,WACFmX,SAAUplD,KAAK25C,aAAaz+C,SAAW,GACvC,OAAO8E,KAAK25C,aAAa,GAAG1L,KAAK33B,KAAI8wC,QAAUA,OAAO7X,QACxD,CAMIV,gBACFuW,SAAUplD,KAAK25C,aAAaz+C,SAAW,GACvC,OAAO8E,KAAK25C,aAAa,GAAG9K,SAC9B,CAMInsC,WACF0iD,SAAUplD,KAAK25C,aAAaz+C,SAAW,GACvC,OAAO8E,KAAK25C,aAAa,GAAGj3C,IAC9B,CASAmnB,YAAY/sB,QAEV,IAAIuS,UAAY,IAAIvS,QAEpB,MAAMmqD,eAAiBxH,aAAsBpwC,WAC7C,IAAI+zC,WAAa,GACjB,IAAK,IAAIpoD,EAAI,EAAGA,EAAIisD,eAAgBjsD,IAAK,CACvC,MAAM89C,UAAYgF,cAAczuC,UAAW,EAAGupC,2BAC9CwK,WAAW9mD,KAAKuoC,KAAKxzB,OAAOvS,cAAAA,OAAO4B,KAAKo4C,YAC1C,CAEA,OAAOqK,YAAYkE,SAAStJ,QAAQr9C,KAAK2O,WAAY+zC,WACvD,CAUAv5B,gBACExb,QACA+0C,WAA4B,IAE5B,MAAMjD,YAAc,IAAIgD,YACxBhD,YAAYlC,gBAAkB5vC,QAAQ4vC,gBACtC,GAAI5vC,QAAQkuC,OAAOC,sBAAwB,EAAG,CAC5C2D,YAAYkD,SAAWh1C,QAAQ2vC,YAAY,EAC7C,CACAoF,WAAWr/B,SAAQ,CAAC+0B,UAAW7mB,SAC7B,MAAMq1B,cAAgB,CACpBxO,UACEA,WAAajU,KAAKxzB,OAAO4xC,mBACrB,KACApe,KAAKF,OAAOmU,WAClBlrB,UAAWvf,QAAQ2vC,YAAY/rB,QAEjCkuB,YAAYiD,WAAW9mD,KAAKgrD,cAAc,IAG5Cj5C,QAAQsrC,aAAa51B,SAAQi2B,cAC3B,MAAM/L,KAAO+L,YAAYsE,SAAShoC,KAAI6nC,UACpC,MAAM5O,OAASlhC,QAAQ2vC,YAAYG,SACnC,MAAO,CACL5O,cACAmM,SACEyE,YAAYiD,WAAWmE,MACrBH,QAAUA,OAAOx5B,UAAUjrB,aAAe4sC,OAAO5sC,cAC9C0L,QAAQuwC,gBAAgBT,SAC/BxC,WAAYttC,QAAQwwC,kBAAkBV,SACvC,IAGHgC,YAAYxG,aAAar9C,KACvB,IAAI4mD,uBAAuB,CACzBjV,UACAY,UAAWxgC,QAAQ2vC,YAAYhE,YAAYC,gBAC3Cv3C,KAAMmiC,KAAKF,OAAOqV,YAAYt3C,QAEjC,IAGHy9C,YAAYsD,SAAWp1C,QACvB8xC,YAAYuD,MAAQvD,YAAYh5C,SAEhC,OAAOg5C,WACT,ECj7BK,MAAMqH,mBAKXz5C,YAAY0P,MAA8Bzd,KAJ1C2+C,cAAQ,EAAA3+C,KACR25C,kBAAY,EAAA35C,KACZi+C,qBAAe,EAGbj+C,KAAK2+C,SAAWlhC,KAAKkhC,SACrB3+C,KAAK25C,aAAel8B,KAAKk8B,aACzB35C,KAAKi+C,gBAAkBxgC,KAAKwgC,eAC9B,CAEAp0B,iBACExb,QACAoP,MAEA,MAAM8+B,OAACA,OAAM8B,qBAAEA,qBAAoBJ,gBAAEA,iBAAmB5vC,QAExD,MAAMmuC,sBACJA,sBAAqBC,0BACrBA,0BAAyBC,4BACzBA,6BACEH,OAEJ,MAAM2C,0BACJ1C,sBAAwBC,0BAC1BjsB,SAAO0uB,0BAA4B,EAAG,6BAEtC,MAAMD,4BACJ5wC,QAAQ+qC,kBAAkBl+C,OAC1BshD,sBACAE,4BACFlsB,SAAOyuB,6BAA+B,EAAG,6BAEzC,MAAMjB,YAAc3vC,QAAQmwC,eAAe/gC,MAC3C,MAAMkhC,SAAWX,YAAYl+C,IAAI,GACjC,GAAI6+C,WAAa1+C,UAAW,CAC1B,MAAM,IAAI3E,MACR,iEAEJ,CAEA,MAAMq+C,aAAyC,GAC/C,IAAK,MAAM8N,cAAcpJ,qBAAsB,CAC7C,MAAMpQ,KAAsB,GAE5B,IAAK,MAAM8L,YAAY0N,WAAWvN,kBAAmB,CACnD,MAAM3K,OAASyO,YAAYl+C,IAAIi6C,UAC/B,GAAIxK,SAAWtvC,UAAW,CACxB,MAAM,IAAI3E,MACR,4CAA4Cy+C,WAEhD,CAEA,MAAM2B,SAAW3B,SAAWyC,sBAE5B,IAAIb,WACJ,GAAID,SAAU,CACZC,WAAa5B,SAAWmF,yBACzB,MAAM,GAAInF,SAAWiE,YAAY5E,kBAAkBl+C,OAAQ,CAC1DygD,WACE5B,SAAWyC,sBAAwByC,2BACvC,KAAO,CACLtD,WACE5B,SAAWiE,YAAY5E,kBAAkBl+C,OAEzC8iD,YAAY3E,uBAAwBprC,SAAS/S,MACjD,CAEA+yC,KAAK3xC,KAAK,CACRizC,cACAmM,SAAU3B,SAAWwC,OAAOC,sBAC5Bb,uBAEJ,CAEA,MAAM9M,UAAYmP,YAAYl+C,IAAI2nD,WAAWxN,gBAC7C,GAAIpL,YAAc5uC,UAAW,CAC3B,MAAM,IAAI3E,MACR,kDAAkDmsD,WAAWxN,iBAEjE,CAEAN,aAAar9C,KACX,IAAI4mD,uBAAuB,CACzBrU,oBACAnsC,KAAM4tB,SAASm3B,WAAW/kD,MAC1BurC,YAGN,CAEA,OAAO,IAAIuZ,mBAAmB,CAC5B7I,kBACAhF,0BACAsE,iCAEJ,CAEAyJ,yBACE,OAAO3J,QAAQW,QAAQ,CACrBC,SAAU3+C,KAAK2+C,SACfV,gBAAiBj+C,KAAKi+C,gBACtBtE,aAAc35C,KAAK25C,cAEvB,CAEAgO,mBACEjH,4BAEA,OAAOF,UAAU9B,QAAQ,CACvBC,SAAU3+C,KAAK2+C,SACfV,gBAAiBj+C,KAAKi+C,gBACtBtE,aAAc35C,KAAK25C,aACnB+G,uDAEJ,ECzHK,MAAMkH,qBAIPxJ,cACF,OAAOp+C,KAAKqO,QAAQ+vC,OACtB,CAEArwC,YAAYM,QAA2B+0C,YAAgCpjD,KAPvEojD,gBAAU,EAAApjD,KACVqO,aAAO,EAOL,GAAI+0C,aAAenjD,UAAW,CAC5BuwB,SACE4yB,WAAWloD,SAAWmT,QAAQkuC,OAAOC,sBACrC,+EAEFx8C,KAAKojD,WAAaA,UACpB,KAAO,CACL,MAAMyE,kBAAoB,GAC1B,IAAK,IAAI7sD,EAAI,EAAGA,EAAIqT,QAAQkuC,OAAOC,sBAAuBxhD,IAAK,CAC7D6sD,kBAAkBvrD,KAAK,IAAIzB,WAAW+9C,2BACxC,CACA54C,KAAKojD,WAAayE,iBACpB,CACA7nD,KAAKqO,QAAUA,OACjB,CAEAk7B,YACE,MAAMsY,kBAAoB7hD,KAAKqO,QAAQk7B,YAEvC,MAAMue,wBAA0BhtD,QAChC2kD,aAAsBqI,wBAAyB9nD,KAAKojD,WAAWloD,QAE/D,MAAM6sD,kBAAoB3N,cAAmB5H,OAI1C,CACD4H,cAAiB/H,KACfyV,wBAAwB5sD,OACxB,2BAEFk/C,cAAAA,IACEpI,YACAhyC,KAAKojD,WAAWloD,OAChB,cAEFk/C,cAAiB/H,KAACwP,kBAAkB3mD,OAAQ,uBAG9C,MAAM8sD,sBAAwB,IAAIntD,WAAW,MAC7C,MAAMotD,4BAA8BF,kBAAkB12C,OACpD,CACEy2C,wBAAyB,IAAIjtD,WAAWitD,yBACxC1E,WAAYpjD,KAAKojD,WACjBvB,qCAEFmG,uBAGF,OAAOA,sBAAsB/lD,MAAM,EAAGgmD,4BACxC,CAEAp+B,mBAAmBm+B,uBACjB,IAAI34C,UAAY,IAAI24C,uBAEpB,MAAM5E,WAAa,GACnB,MAAM8E,iBAAmBzI,aAAsBpwC,WAC/C,IAAK,IAAIrU,EAAI,EAAGA,EAAIktD,iBAAkBltD,IAAK,CACzCooD,WAAW9mD,KACT,IAAIzB,WAAWijD,cAAczuC,UAAW,EAAGupC,4BAE/C,CAEA,MAAMvqC,QAAUy0C,iBAAiBxZ,YAAY,IAAIzuC,WAAWwU,YAC5D,OAAO,IAAIu4C,qBAAqBv5C,QAAS+0C,WAC3C,CAEA91B,KAAKw2B,SACH,MAAMqE,YAAcnoD,KAAKqO,QAAQk7B,YACjC,MAAM6e,cAAgBpoD,KAAKqO,QAAQ+qC,kBAAkBn3C,MACnD,EACAjC,KAAKqO,QAAQkuC,OAAOC,uBAEtB,IAAK,MAAMyJ,UAAUnC,QAAS,CAC5B,MAAMuE,YAAcD,cAAc1K,WAAUnO,QAC1CA,OAAO3qC,OAAOqhD,OAAOr4B,aAEvB4C,SACE63B,aAAe,EACf,mCAAmCpC,OAAOr4B,UAAU6gB,cAEtDzuC,KAAKojD,WAAWiF,aAAe/6B,KAAK66B,YAAalC,OAAO71B,UAC1D,CACF,CAEAi2B,aAAaz4B,UAAsBkrB,WACjCtoB,SAAOsoB,UAAUv+C,aAAe,GAAI,mCACpC,MAAM6tD,cAAgBpoD,KAAKqO,QAAQ+qC,kBAAkBn3C,MACnD,EACAjC,KAAKqO,QAAQkuC,OAAOC,uBAEtB,MAAM6L,YAAcD,cAAc1K,WAAUnO,QAC1CA,OAAO3qC,OAAOgpB,aAEhB4C,SACE63B,aAAe,EACf,4BAA4Bz6B,UAAU6gB,yDAExCzuC,KAAKojD,WAAWiF,aAAevP,SACjC,ECvHK,MAAMwP,qBAAuB,IAK7B,MAAMC,uBAAyB,GAK/B,MAAMC,qBACXF,qBAAuBC,uBAKlB,MAAME,YAAc,IAAOD,2BCpBrBE,oBAAsB,IAAIna,UACrC,qDAGWoa,6BAA+B,IAAIpa,UAC9C,qDAGWqa,2BAA6B,IAAIra,UAC5C,qDAGWsa,iCAAmC,IAAIta,UAClD,qDAGWua,mBAAqB,IAAIva,UACpC,qDAGWwa,sBAAwB,IAAIxa,UACvC,qDAGWya,0BAA4B,IAAIza,UAC3C,qDAGW0a,2BAA6B,IAAI1a,UAC5C,qDAGW2a,4BAA8B,IAAI3a,UAC7C,+CChCK,MAAM4a,6BAA6B7tD,MAKxCyS,aAAYq7C,OACVA,OAAMtQ,UACNA,UAASuQ,mBACTA,mBAAkBC,KAClBA,OAOA,MAAMC,gBAAkBD,KACpB,WAAWrF,KAAKC,UAAUoF,KAAKrnD,OAAO,IAAK,KAAM,OACjD,GACJ,MAAMunD,UACJ,kFACF,IAAIn7C,QACJ,OAAQ+6C,QACN,IAAK,OACH/6C,QACE,eAAeyqC,qCACf,GAAGuQ,uBACHE,gBACAC,UACF,MACF,IAAK,WACHn7C,QACE,iCAAiCg7C,yBACjCE,gBACAC,UACF,MACF,QAAS,CACPn7C,QAAU,mBAAmB,CAAEvL,GAAaA,EAAf,CAAkBsmD,UACjD,EAEFp7C,MAAMK,SAASrO,KAvCT84C,eAAS,EAAA94C,KACTqpD,wBAAkB,EAAArpD,KAClBypD,qBAAe,EAuCrBzpD,KAAK84C,UAAYA,UACjB94C,KAAKqpD,mBAAqBA,mBAC1BrpD,KAAKypD,gBAAkBH,KAAOA,KAAOrpD,SACvC,CAEIypD,uBACF,MAAO,CACLr7C,QAASrO,KAAKqpD,mBACdC,KAAMxuD,MAAM2H,QAAQzC,KAAKypD,iBACrBzpD,KAAKypD,gBACLxpD,UAER,CAGIqpD,WACF,MAAMK,WAAa3pD,KAAKypD,gBACxB,GACEE,YAAc,aACPA,aAAe,UACtB,SAAUA,WACV,CACA,OAAO1pD,SACT,CACA,OAAO0pD,UACT,CAEAjE,cAAcC,YACZ,IAAK7qD,MAAM2H,QAAQzC,KAAKypD,iBAAkB,CACxCzpD,KAAKypD,gBAAkB,IAAIG,SAAQ,CAACC,QAASC,UAC3CnE,WACGoE,eAAe/pD,KAAK84C,WACpBkR,MAAKC,KACJ,GAAIA,IAAMA,GAAG9P,MAAQ8P,GAAG9P,KAAK+P,YAAa,CACxC,MAAMZ,KAAOW,GAAG9P,KAAK+P,YACrBlqD,KAAKypD,gBAAkBH,KACvBO,QAAQP,KACV,KAAO,CACLQ,OAAO,IAAIxuD,MAAM,0BACnB,KAED6uD,MAAML,OAAO,GAEpB,CACA,aAAa9pD,KAAKypD,eACpB,EAKK,MAAMW,uBAAyB,CACpCC,wCAAyC,MACzCC,0DAA2D,MAC3DC,kEAAmE,MACnEC,2CAA4C,MAC5CC,sCAAuC,MACvCC,mEAAoE,MACpEC,oCAAqC,MACrCC,mCAAoC,MACpCC,sDAAuD,MACvDC,yDAA0D,MAC1DC,yDAA0D,MAC1DC,qBAAsB,MACtBC,0DAA2D,MAC3DC,sDAAuD,MACvDC,uDAAwD,MACxDC,oDAAqD,OAKhD,MAAMC,2BAA2B/vD,MAGtCyS,aACEhT,KACEA,KAAIsT,QACJA,QAAO3L,KACPA,MAEF4oD,eAEAt9C,MAAMs9C,eAAiB,KAAO,GAAGA,kBAAkBj9C,UAAYA,SAASrO,KAV1EjF,UAAI,EAAAiF,KACJ0C,UAAI,EAUF1C,KAAKjF,KAAOA,KACZiF,KAAK0C,KAAOA,KACZ1C,KAAKmO,KAAO,oBACd,ECjHKu3C,eAAe6F,0BACpB5F,WACAxF,YACA2D,QACAv2B,SAMA,MAAMi+B,YAAcj+B,SAAW,CAC7Bk+B,cAAel+B,QAAQk+B,cACvBC,oBAAqBn+B,QAAQm+B,qBAAuBn+B,QAAQo+B,WAC5DC,WAAYr+B,QAAQq+B,WACpBjI,eAAgBp2B,QAAQo2B,gBAG1B,MAAM7K,gBAAkB6M,WAAWkG,gBACjC1L,YACA2D,QACA0H,aAGF,IAAIM,OACJ,GACE3L,YAAYlC,iBAAmB,MAC/BkC,YAAYmD,sBAAwB,KACpC,CACAwI,cACQnG,WAAWoG,mBACf,CACEC,YAAaz+B,SAASy+B,YACtBlT,UAAWA,UACX8K,UAAWzD,YAAYlC,gBACvBqF,qBAAsBnD,YAAYmD,sBAEpC/1B,SAAWA,QAAQo+B,aAErB3tD,KACJ,MAAO,GACLmiD,YAAYqD,qBAAuB,MACnCrD,YAAYoD,WAAa,KACzB,CACA,MAAMM,iBAACA,kBAAoB1D,YAAYoD,UACvC,MAAM0I,mBAAqBpI,iBAAiB5V,KAAK,GAAGsB,OACpDuc,cACQnG,WAAWoG,mBACf,CACEC,YAAaz+B,SAASy+B,YACtBrI,eAAgBxD,YAAYqD,oBAC5ByI,sCACAC,WAAY/L,YAAYoD,UAAUtU,MAClC6J,qBAEFvrB,SAAWA,QAAQo+B,aAErB3tD,KACJ,KAAO,CACL,GAAIuvB,SAASy+B,aAAe,KAAM,CAChC3sD,QAAQ8kD,KACN,0FACE,yFACA,2EAEN,CACA2H,cACQnG,WAAWoG,mBACfjT,UACAvrB,SAAWA,QAAQo+B,aAErB3tD,KACJ,CAEA,GAAI8tD,OAAO1c,IAAK,CACd,GAAI0J,WAAa,KAAM,CACrB,MAAM,IAAIqQ,qBAAqB,CAC7BC,OAAQ,OACRtQ,UAAWA,UACXuQ,mBAAoB,YAAYpF,KAAKC,UAAU4H,YAEnD,CACA,MAAM,IAAIxwD,MACR,eAAew9C,qBAAqBmL,KAAKC,UAAU4H,WAEvD,CAEA,OAAOhT,SACT,CCxGO,SAASqT,MAAMC,IACpB,OAAO,IAAIxC,SAAQC,SAAWwC,WAAWxC,QAASuC,KACpD,CCoBO,SAASE,WACd9pD,KACAqqC,QAEA,MAAM0f,YACJ/pD,KAAKwxC,OAAOT,MAAQ,EAAI/wC,KAAKwxC,OAAOT,KAAOvB,SAAgBxvC,KAAMqqC,QACnE,MAAMnqC,KAAO5D,cAAAA,OAAO2C,MAAM8qD,aAC1B,MAAMC,aAAe/sD,OAAOouC,OAAO,CAACmM,YAAax3C,KAAKyvB,OAAQ4a,QAC9DrqC,KAAKwxC,OAAO3iC,OAAOm7C,aAAc9pD,MACjC,OAAOA,IACT,CAMO,SAAS+pD,aACdjqD,KACA1F,QAEA,IAAI4F,KACJ,IACEA,KAAOF,KAAKwxC,OAAOrP,OAAO7nC,OAC3B,CAAC,MAAOsyC,KACP,MAAM,IAAI9zC,MAAM,wBAA0B8zC,IAC5C,CAEA,GAAI1sC,KAAKs3C,cAAgBx3C,KAAKyvB,MAAO,CACnC,MAAM,IAAI32B,MACR,mDAAmDoH,KAAKs3C,kBAAkBx3C,KAAKyvB,QAEnF,CAEA,OAAOvvB,IACT,CClDO,MAAMgqD,oBAAsBtS,cAAiB/J,KAAC,wBCOrD,MAAMsc,mBAAqBvS,cAAmB5H,OAU5C,CACA4H,cAAgBtV,IAAC,WACjBsV,cAAgBtV,IAAC,SACjBkN,UAAiB,oBACjBA,UAAiB,SACjBoI,cAAAA,OACE,CAACsS,qBACD,mBAISE,MAAAA,qBAAuBD,mBAAmBpZ,KAgBhD,MAAMsZ,aAQX9+C,YAAY0P,MAAwBzd,KAPpC8sD,sBAAgB,EAAA9sD,KAChBivC,WAAK,EAAAjvC,KACL+sD,mBAAa,EAMX/sD,KAAK8sD,iBAAmBrvC,KAAKqvC,iBAC7B9sD,KAAKivC,MAAQxxB,KAAKwxB,MAClBjvC,KAAK+sD,cAAgBtvC,KAAKsvC,aAC5B,CAQAljC,uBACE/sB,QAEA,MAAMkwD,aAAeL,mBAAmBhoB,OAAOrU,SAASxzB,QAAS,GACjE,OAAO,IAAI+vD,aAAa,CACtBC,iBAAkB,IAAIve,UAAUye,aAAaF,kBAC7C7d,MAAO,IAAIV,UAAUye,aAAa/d,OAAOtsC,WACzCoqD,cAAeC,aAAaD,eAEhC,EC6GF,IAAIE,qDAAuD,OAC3D,IAAIC,0CAA4C,QAGhD,IAAIC,kEAAoE,QACxE,IAAIC,0DAA4D,QAChE,IAAIC,wDAA0D,QAK9D,IAAIC,0CAA4C,QA4BhD,SAASC,YAAYvvD,OACnB,GAAIlD,MAAM2H,QAAQzE,OAAQ,CACxB,MAAMwvD,qBAAuBxvD,MAAMsY,IAAIi3C,aAAahxD,KAClD,UAGF,MAAO,MAAQixD,qBACf,KACJ,MAAS,UAAWxvD,QAAU,SAAU,CACpC,MAAO,GAAGA,QACd,KAAS,CACL,OAAOyvD,mBACLvqD,OACElF,OAAS,MAAQyB,OAAOiuD,eAAe1vD,SAAW,KAAI,IAG/CA,OACHA,OAGZ,CACA,CACA,SAAS2vD,0BAA0B3qC,IAAKhlB,QACtC,MAAO,GAAGglB,OAAOuqC,YAAYvvD,QAC/B,CACA,SAAS4vD,oBAAoBzgC,SAC3B,MAAM0gC,mBAAqBpuD,OAAO4d,QAAQ8P,SAAS7W,IAAIq3C,0BAA0BpxD,KAAK,KACtF,OAAOuxD,KAAKD,mBACd,CAsSA,SAASE,gBAAgBhzD,KAAMoyB,QAAU,IAGhC,CACL,IAAI6gC,sBAAwB,iBAAiBjzD,qEAAqEA,OAClH,GAAI0E,OAAOwuC,KAAK9gB,SAASjyB,OAAQ,CAC/B8yD,uBAAyB,KAAKJ,oBAAoBzgC,WACxD,CACI,MAAO,GAAG6gC,yBACd,CACA,CAaA,IAAIC,YAAc,cAAc3yD,MAO9B4yD,MAAQluD,KAAKkuD,MAIb/gC,QACApf,gBAAgBhT,KAAMozD,yBACpB,IAAIhhC,QACJ,IAAIihC,aACJ,GAAID,uBAAwB,CAC1B,MAAMD,MAAEA,SAAUG,aAAgBF,uBAClC,GAAID,MAAO,CACTE,aAAe,CAAEF,YACzB,CACM,GAAIzuD,OAAOwuC,KAAKogB,aAAanzD,OAAS,EAAG,CACvCiyB,QAAUkhC,WAClB,CACA,CACI,MAAMhgD,QAAU0/C,gBAAgBhzD,KAAMoyB,SACtCnf,MAAMK,QAAS+/C,cACfpuD,KAAKmtB,QAAU,CACbmhC,OAAQvzD,QACLoyB,SAELntB,KAAKmO,KAAO,aAChB,GC1jBA,SAASogD,eAAevwD,MAAOwwD,SAC7B,MAAO,cAAeA,QAAUA,QAAQC,UAAYD,QAAQE,iBAAiB1wD,MAC/E,CACA,SAAS2wD,cAAcH,SACrB,OAAO/uD,OAAOqiB,OAAO,IAChB0sC,QACHn9C,OAASrT,QACP,MAAMoK,MAAQ,IAAIvN,WAAW0zD,eAAevwD,MAAOwwD,UACnDA,QAAQzwD,MAAMC,MAAOoK,MAAO,GAC5B,OAAOA,KAAK,GAGlB,CACA,SAASwmD,cAAcC,SACrB,OAAOpvD,OAAOqiB,OAAO,IAChB+sC,QACHlqB,OAAQ,CAACv8B,MAAOrL,OAAS,IAAM8xD,QAAQhyD,KAAKuL,MAAOrL,QAAQ,IAE/D,CAYA,SAAS+xD,YAAYC,OACnB,MAAO,cAAeA,cAAgBA,MAAMN,YAAc,QAC5D,CAcA,SAASO,aAAaR,QAASK,SAC7B,GAAIC,YAAYN,WAAaM,YAAYD,SAAU,CACjD,MAAM,IAAIZ,YAAYd,kEAC1B,CACE,GAAI2B,YAAYN,UAAYM,YAAYD,UAAYL,QAAQC,YAAcI,QAAQJ,UAAW,CAC3F,MAAM,IAAIR,YAAYb,0DAA2D,CAC/E6B,iBAAkBJ,QAAQJ,UAC1BS,iBAAkBV,QAAQC,WAEhC,CACE,IAAKK,YAAYN,WAAaM,YAAYD,UAAYL,QAAQW,UAAYN,QAAQM,QAAS,CACzF,MAAM,IAAIlB,YAAYZ,wDAAyD,CAC7E+B,eAAgBP,QAAQM,QACxBE,eAAgBb,QAAQW,SAE9B,CACE,MAAO,IACFN,WACAL,QACH7pB,OAAQkqB,QAAQlqB,OAChBtzB,OAAQm9C,QAAQn9C,OAChBxU,KAAMgyD,QAAQhyD,KACdkB,MAAOywD,QAAQzwD,MAEnB,CAkEA,SAASuxD,kCAAkCC,iBAAkBnnD,MAAOrL,OAAS,GAC3E,GAAIqL,MAAMlN,OAAS6B,QAAU,EAAG,CAC9B,MAAM,IAAIkxD,YAAYhB,qDAAsD,CAC1EsC,mCAEN,CACA,CACA,SAASC,sCAAsCD,iBAAkBE,SAAUrnD,MAAOrL,OAAS,GACzF,MAAMsV,YAAcjK,MAAMlN,OAAS6B,OACnC,GAAIsV,YAAco9C,SAAU,CAC1B,MAAM,IAAIxB,YAAYf,0CAA2C,CAC/D76C,wBACAk9C,kCACAE,mBAEN,CACA,CCtLA,SAASC,8BAA8BH,iBAAkBtsD,IAAK8B,IAAK/G,OACjE,GAAIA,MAAQiF,KAAOjF,MAAQ+G,IAAK,CAC9B,MAAM,IAAIkpD,YAAYX,0CAA2C,CAC/DiC,kCACAxqD,QACA9B,QACAjF,aAEN,CACA,CAQA,SAAS2xD,eAAe9I,QACtB,OAAOA,QAAQ91B,SAAW,EAAc,MAAQ,IAClD,CACA,SAAS6+B,qBAAqBrhD,OAC5B,OAAOogD,cAAc,CACnBF,UAAWlgD,MAAM/M,KACjBzD,MAAMC,MAAOoK,MAAOrL,QAClB,GAAIwR,MAAMD,MAAO,CACfohD,8BAA8BnhD,MAAMJ,KAAMI,MAAMD,MAAM,GAAIC,MAAMD,MAAM,GAAItQ,MAClF,CACM,MAAM6xD,YAAc,IAAIhvD,YAAY0N,MAAM/M,MAC1C+M,MAAMhL,IAAI,IAAIyN,SAAS6+C,aAAc7xD,MAAO2xD,eAAephD,MAAMs4C,SACjEz+C,MAAM7E,IAAI,IAAI1I,WAAWg1D,aAAc9yD,QACvC,OAAOA,OAASwR,MAAM/M,IAC5B,GAEA,CACA,SAASsuD,qBAAqBvhD,OAC5B,OAAOqgD,cAAc,CACnBH,UAAWlgD,MAAM/M,KACjB3E,KAAKuL,MAAOrL,OAAS,GACnBuyD,kCAAkC/gD,MAAMJ,KAAM/F,MAAOrL,QACrDyyD,sCAAsCjhD,MAAMJ,KAAMI,MAAM/M,KAAM4G,MAAOrL,QACrE,MAAMyV,KAAO,IAAIxB,SAAS++C,cAAc3nD,MAAOrL,OAAQwR,MAAM/M,OAC7D,MAAO,CAAC+M,MAAMzO,IAAI0S,KAAMm9C,eAAephD,MAAMs4C,SAAU9pD,OAASwR,MAAM/M,KAC5E,GAEA,CACA,SAASuuD,cAAc3nD,MAAOrL,OAAQ7B,QACpC,MAAM80D,YAAc5nD,MAAMlI,YAAcnD,QAAU,GAClD,MAAMsV,YAAcnX,QAAUkN,MAAM7N,WACpC,OAAO6N,MAAMtL,OAAOmF,MAAM+tD,YAAaA,YAAc39C,YACvD,CA8MA,IAAI49C,cAAgB,CAACpJ,OAAS,CAAE,IAAK+I,qBAAqB,CACxD/I,cACA14C,KAAM,MACNG,MAAO,CAAC,GAAItE,OAAO,uBACnBzG,IAAK,CAACiP,KAAMxU,MAAO+V,KAAOvB,KAAKD,aAAa,EAAGvI,OAAOhM,OAAQ+V,IAC9DvS,KAAM,IAER,IAAI0uD,cAAgB,CAACrJ,OAAS,CAAE,IAAKiJ,qBAAqB,CACxDjJ,cACA/mD,IAAK,CAAC0S,KAAMuB,KAAOvB,KAAK29C,aAAa,EAAGp8C,IACxC5F,KAAM,MACN3M,KAAM,IAER,IAAI4uD,YAAc,CAACvJ,OAAS,CAAA,IAAOmI,aAAaiB,cAAcpJ,QAASqJ,cAAcrJ,SC5Q9E,SAAS1wC,IAAIq9B,UAClB,MAAMQ,OAAS3B,cAAAA,KAAK,EAAemB,UACnC,MAAM7O,OAASqP,OAAOrP,OAAOsR,KAAKjC,QAClC,MAAM3iC,OAAS2iC,OAAO3iC,OAAO4kC,KAAKjC,QAElC,MAAMqc,aAAerc,OACrB,MAAM+a,MAAQqB,cAEdC,aAAa1rB,OAAS,CAAC7nC,OAAgBC,UACrC,MAAMuS,IAAMq1B,OAAO7nC,OAAsBC,QACzC,OAAOgyD,MAAMpqB,OAAOr1B,IAAI,EAG1B+gD,aAAah/C,OAAS,CAACi/C,OAAgBxzD,OAAgBC,UACrD,MAAMuS,IAAMy/C,MAAM19C,OAAOi/C,QACzB,OAAOj/C,OAAO/B,IAAKxS,OAAsBC,OAAO,EAGlD,OAAOszD,YACT,CCwNO,MAAME,kBAIXxiD,cAAc,CAKd8b,6BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAEhC,MAAM4hB,sBAAwBrW,cAAgBtV,IAAC,eAC/C,MAAM4rB,UAAYD,sBAAsB9rB,OAAOqV,YAAYt3C,MAE3D,IAAIF,KACJ,IAAK,MAAOmuD,OAAQ3c,UAAWv0C,OAAO4d,QAAQuzC,4BAA6B,CACzE,GAAI5c,OAAO/hB,OAASy+B,UAAW,CAC7BluD,KAAOmuD,OACP,KACF,CACF,CAEA,IAAKnuD,KAAM,CACT,MAAM,IAAIlH,MAAM,sDAClB,CAEA,OAAOkH,IACT,CAKAqnB,2BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM6iB,SAACA,SAAQC,MAAEA,MAAKliB,UAAEA,WAAa4d,aACnCmE,2BAA2BI,OAC3BhX,YAAYt3C,MAGd,MAAO,CACLuuD,WAAYjX,YAAY/L,KAAK,GAAGsB,OAChC2hB,iBAAkBlX,YAAY/L,KAAK,GAAGsB,OACtCuhB,kBACAC,YACAliB,UAAW,IAAIN,UAAUM,WAE7B,CAKAhlB,sBACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM6iB,SAACA,UAAYrE,aACjBmE,2BAA2BO,SAC3BnX,YAAYt3C,MAGd,MAAO,CACLuuD,WAAYjX,YAAY/L,KAAK,GAAGsB,OAChC6hB,SAAUpX,YAAY/L,KAAK,GAAGsB,OAC9BuhB,kBAEJ,CAKAjnC,8BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM6iB,SAACA,SAAQ/0C,KAAEA,KAAI8yB,UAAEA,WAAa4d,aAClCmE,2BAA2BS,iBAC3BrX,YAAYt3C,MAGd,MAAO,CACLuuD,WAAYjX,YAAY/L,KAAK,GAAGsB,OAChC+hB,WAAYtX,YAAY/L,KAAK,GAAGsB,OAChC6hB,SAAUpX,YAAY/L,KAAK,GAAGsB,OAC9BuhB,kBACA/0C,UACA8yB,UAAW,IAAIN,UAAUM,WAE7B,CAKAhlB,sBAAsBmwB,aACpBh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM8iB,MAACA,OAAStE,aACdmE,2BAA2BW,SAC3BvX,YAAYt3C,MAGd,MAAO,CACL8uD,cAAexX,YAAY/L,KAAK,GAAGsB,OACnCwhB,YAEJ,CAKAlnC,8BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAMtpB,KAACA,KAAI5I,KAAEA,KAAIg1C,MAAEA,MAAKliB,UAAEA,WAAa4d,aACrCmE,2BAA2Ba,iBAC3BzX,YAAYt3C,MAGd,MAAO,CACL8uD,cAAexX,YAAY/L,KAAK,GAAGsB,OACnC+hB,WAAY,IAAI/iB,UAAU5pB,MAC1B5I,UACAg1C,YACAliB,UAAW,IAAIN,UAAUM,WAE7B,CAKAhlB,oBAAoBmwB,aAClBh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAMY,UAACA,WAAa4d,aAClBmE,2BAA2Bc,OAC3B1X,YAAYt3C,MAGd,MAAO,CACL8uD,cAAexX,YAAY/L,KAAK,GAAGsB,OACnCV,UAAW,IAAIN,UAAUM,WAE7B,CAKAhlB,4BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAMtpB,KAACA,KAAI5I,KAAEA,KAAI8yB,UAAEA,WAAa4d,aAC9BmE,2BAA2Be,eAC3B3X,YAAYt3C,MAGd,MAAO,CACL8uD,cAAexX,YAAY/L,KAAK,GAAGsB,OACnC+hB,WAAY,IAAI/iB,UAAU5pB,MAC1B5I,UACA8yB,UAAW,IAAIN,UAAUM,WAE7B,CAKAhlB,4BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAMtpB,KAACA,KAAI5I,KAAEA,KAAI+0C,SAAEA,SAAQC,MAAEA,MAAKliB,UAAEA,WAAa4d,aAC/CmE,2BAA2BgB,eAC3B5X,YAAYt3C,MAGd,MAAO,CACLuuD,WAAYjX,YAAY/L,KAAK,GAAGsB,OAChC2hB,iBAAkBlX,YAAY/L,KAAK,GAAGsB,OACtC+hB,WAAY,IAAI/iB,UAAU5pB,MAC1B5I,UACA+0C,kBACAC,YACAliB,UAAW,IAAIN,UAAUM,WAE7B,CAKAhlB,6BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM0M,WAACA,YAAc8R,aACnBmE,2BAA2BiB,uBAC3B7X,YAAYt3C,MAGd,MAAO,CACLovD,YAAa9X,YAAY/L,KAAK,GAAGsB,OACjCud,iBAAkB,IAAIve,UAAUoM,YAEpC,CAKA9wB,0BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtCwe,aACEmE,2BAA2BmB,oBAC3B/X,YAAYt3C,MAGd,MAAO,CACLovD,YAAa9X,YAAY/L,KAAK,GAAGsB,OACjCud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OAE1C,CAKA1lB,2BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM6iB,SAACA,UAAYrE,aACjBmE,2BAA2BoB,qBAC3BhY,YAAYt3C,MAGd,MAAO,CACLovD,YAAa9X,YAAY/L,KAAK,GAAGsB,OACjC6hB,SAAUpX,YAAY/L,KAAK,GAAGsB,OAC9Bud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OACtCuhB,kBAEJ,CAKAjnC,4BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM0M,WAACA,YAAc8R,aACnBmE,2BAA2BqB,sBAC3BjY,YAAYt3C,MAGd,MAAO,CACLovD,YAAa9X,YAAY/L,KAAK,GAAGsB,OACjCud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OACtC2iB,oBAAqB,IAAI3jB,UAAUoM,YAEvC,CAKA9wB,sBAAsBglB,WACpB,IAAKA,UAAUjqC,OAAOutD,cAActjB,WAAY,CAC9C,MAAM,IAAIvzC,MAAM,sDAClB,CACF,CAKAuuB,sBAAsBokB,KAAkBtzB,gBACtC,GAAIszB,KAAK/yC,OAASyf,eAAgB,CAChC,MAAM,IAAIrf,MACR,8BAA8B2yC,KAAK/yC,kCAAkCyf,iBAEzE,CACF,QAgFWi2C,2BAA6BnxD,OAAOqiB,OAI9C,CACDkvC,OAAQ,CACN/+B,MAAO,EACP+hB,OAAQoG,cAAAA,OAA0D,CAChEA,kBAAiB,eACjBA,cAAiB/B,KAAC,YAClB+B,cAAiB/B,KAAC,SAClBrG,UAAiB,gBAGrB0f,OAAQ,CACNz/B,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAuC,CAChE4H,cAAgBtV,IAAC,eACjBkN,UAAiB,gBAGrBmf,SAAU,CACRl/B,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAyC,CAClE4H,cAAgBtV,IAAC,eACjB3uB,IAAI,eAGRy7C,eAAgB,CACd3/B,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAA+C,CACxE4H,cAAgBtV,IAAC,eACjBkN,UAAiB,QACjBA,WAAkB,QAClBoI,cAAAA,KAAkB,YAClBA,cAAAA,KAAkB,SAClBpI,UAAiB,gBAGrB+f,oBAAqB,CACnB9/B,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,kBAEtBktB,qBAAsB,CACpB//B,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,eAAgBsV,cAAAA,KAAkB,eAExDyX,uBAAwB,CACtB5/B,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,eAAgBkN,UAAiB,iBAEvDigB,sBAAuB,CACrBhgC,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,eAAgBkN,UAAiB,iBAEvDuf,SAAU,CACRt/B,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAyC,CAClE4H,cAAgBtV,IAAC,eACjBsV,cAAAA,KAAkB,YAGtBqX,iBAAkB,CAChBx/B,MAAO,EACP+hB,OAAQoG,cAAmB5H,OACzB,CACE4H,cAAAA,IAAiB,eACjBpI,UAAiB,QACjBA,WAAkB,QAClBoI,cAAiB/B,KAAC,SAClBrG,UAAiB,gBAIvB2f,eAAgB,CACd1/B,MAAO,GACP+hB,OAAQoG,cAAAA,OAAkE,CACxEA,kBAAiB,eACjBpI,UAAiB,QACjBA,WAAkB,QAClBA,UAAiB,gBAGrBqf,iBAAkB,CAChBp/B,MAAO,GACP+hB,OAAQoG,cAAAA,OACN,CACEA,kBAAiB,eACjBjkC,IAAI,YACJ67B,WAAkB,QAClBA,UAAiB,gBAIvBogB,oBAAqB,CACnBngC,MAAO,GACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,oBAOjB,MAAMqtB,cAIXpkD,cAAc,CAYd8b,qBAAqBwoC,QACnB,MAAM7vD,KAAOouD,2BAA2BI,OACxC,MAAMtuD,KAAO4pD,WAAW9pD,KAAM,CAC5BsuD,SAAUuB,OAAOvB,SACjBC,MAAOsB,OAAOtB,MACdliB,UAAWve,SAAS+hC,OAAOxjB,UAAUve,cAGvC,OAAO,IAAI4yB,uBAAuB,CAChCjV,KAAM,CACJ,CAACsB,OAAQ8iB,OAAOpB,WAAYvV,SAAU,KAAMC,WAAY,MACxD,CAACpM,OAAQ8iB,OAAOnB,iBAAkBxV,SAAU,KAAMC,WAAY,OAEhE9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,gBACEwoC,QAEA,IAAI3vD,KACJ,IAAIurC,KACJ,GAAI,eAAgBokB,OAAQ,CAC1B,MAAM7vD,KAAOouD,2BAA2BS,iBACxC3uD,KAAO4pD,WAAW9pD,KAAM,CACtBsuD,SAAU9mD,OAAOqoD,OAAOvB,UACxB/0C,KAAMs2C,OAAOt2C,KACb8yB,UAAWve,SAAS+hC,OAAOxjB,UAAUve,cAEvC2d,KAAO,CACL,CAACsB,OAAQ8iB,OAAOpB,WAAYvV,SAAU,MAAOC,WAAY,MACzD,CAACpM,OAAQ8iB,OAAOf,WAAY5V,SAAU,KAAMC,WAAY,OACxD,CAACpM,OAAQ8iB,OAAOjB,SAAU1V,SAAU,MAAOC,WAAY,MAE3D,KAAO,CACL,MAAMn5C,KAAOouD,2BAA2BO,SACxCzuD,KAAO4pD,WAAW9pD,KAAM,CAACsuD,SAAU9mD,OAAOqoD,OAAOvB,YACjD7iB,KAAO,CACL,CAACsB,OAAQ8iB,OAAOpB,WAAYvV,SAAU,KAAMC,WAAY,MACxD,CAACpM,OAAQ8iB,OAAOjB,SAAU1V,SAAU,MAAOC,WAAY,MAE3D,CAEA,OAAO,IAAIuH,uBAAuB,CAChCjV,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,cACEwoC,QAEA,IAAI3vD,KACJ,IAAIurC,KACJ,GAAI,eAAgBokB,OAAQ,CAC1B,MAAM7vD,KAAOouD,2BAA2Be,eACxCjvD,KAAO4pD,WAAW9pD,KAAM,CACtBmiB,KAAM2L,SAAS+hC,OAAOf,WAAWhhC,YACjCvU,KAAMs2C,OAAOt2C,KACb8yB,UAAWve,SAAS+hC,OAAOxjB,UAAUve,cAEvC2d,KAAO,CACL,CAACsB,OAAQ8iB,OAAOb,cAAe9V,SAAU,MAAOC,WAAY,MAC5D,CAACpM,OAAQ8iB,OAAOf,WAAY5V,SAAU,KAAMC,WAAY,OAE5D,KAAO,CACL,MAAMn5C,KAAOouD,2BAA2Bc,OACxChvD,KAAO4pD,WAAW9pD,KAAM,CACtBqsC,UAAWve,SAAS+hC,OAAOxjB,UAAUve,cAEvC2d,KAAO,CAAC,CAACsB,OAAQ8iB,OAAOb,cAAe9V,SAAU,KAAMC,WAAY,MACrE,CAEA,OAAO,IAAIuH,uBAAuB,CAChCjV,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAMAmnB,6BACEwoC,QAEA,MAAM7vD,KAAOouD,2BAA2BgB,eACxC,MAAMlvD,KAAO4pD,WAAW9pD,KAAM,CAC5BmiB,KAAM2L,SAAS+hC,OAAOf,WAAWhhC,YACjCvU,KAAMs2C,OAAOt2C,KACb+0C,SAAUuB,OAAOvB,SACjBC,MAAOsB,OAAOtB,MACdliB,UAAWve,SAAS+hC,OAAOxjB,UAAUve,cAEvC,IAAI2d,KAAO,CACT,CAACsB,OAAQ8iB,OAAOpB,WAAYvV,SAAU,KAAMC,WAAY,MACxD,CAACpM,OAAQ8iB,OAAOnB,iBAAkBxV,SAAU,MAAOC,WAAY,OAEjE,IAAK0W,OAAOf,WAAW1sD,OAAOytD,OAAOpB,YAAa,CAChDhjB,KAAK3xC,KAAK,CACRizC,OAAQ8iB,OAAOf,WACf5V,SAAU,KACVC,WAAY,OAEhB,CAEA,OAAO,IAAIuH,uBAAuB,CAChCjV,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,0BACEwoC,QAEA,MAAMlS,YAAc,IAAIgD,YACxB,GAAI,eAAgBkP,QAAU,SAAUA,OAAQ,CAC9ClS,YAAYhrC,IACVg9C,cAAcG,sBAAsB,CAClCrB,WAAYoB,OAAOpB,WACnBC,iBAAkBmB,OAAOP,YACzBR,WAAYe,OAAOf,WACnBv1C,KAAMs2C,OAAOt2C,KACb+0C,SAAUuB,OAAOvB,SACjBC,MAAOnE,qBACP/d,UAAW7uC,KAAK6uC,YAGtB,KAAO,CACLsR,YAAYhrC,IACVg9C,cAAcI,cAAc,CAC1BtB,WAAYoB,OAAOpB,WACnBC,iBAAkBmB,OAAOP,YACzBhB,SAAUuB,OAAOvB,SACjBC,MAAOnE,qBACP/d,UAAW7uC,KAAK6uC,YAGtB,CAEA,MAAM2jB,WAAa,CACjBV,YAAaO,OAAOP,YACpBhF,iBAAkBuF,OAAOvF,kBAG3B3M,YAAYhrC,IAAInV,KAAKyyD,gBAAgBD,aACrC,OAAOrS,WACT,CAKAt2B,uBACEwoC,QAEA,MAAM7vD,KAAOouD,2BAA2BiB,uBACxC,MAAMnvD,KAAO4pD,WAAW9pD,KAAM,CAC5Bm4C,WAAYrqB,SAAS+hC,OAAOvF,iBAAiBx8B,cAE/C,MAAMoiC,gBAAkB,CACtBzkB,KAAM,CACJ,CAACsB,OAAQ8iB,OAAOP,YAAapW,SAAU,MAAOC,WAAY,MAC1D,CACEpM,OAAQsZ,iCACRnN,SAAU,MACVC,WAAY,OAEd,CAACpM,OAAQuZ,mBAAoBpN,SAAU,MAAOC,WAAY,QAE5D9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEF,OAAO,IAAIwgD,uBAAuBwP,gBACpC,CAKA7oC,oBAAoBwoC,QAClB,MAAM7vD,KAAOouD,2BAA2BmB,oBACxC,MAAMrvD,KAAO4pD,WAAW9pD,MACxB,MAAMkwD,gBAAkB,CACtBzkB,KAAM,CACJ,CAACsB,OAAQ8iB,OAAOP,YAAapW,SAAU,MAAOC,WAAY,MAC1D,CACEpM,OAAQsZ,iCACRnN,SAAU,MACVC,WAAY,OAEd,CAACpM,OAAQ8iB,OAAOvF,iBAAkBpR,SAAU,KAAMC,WAAY,QAEhE9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEF,OAAO,IAAIwgD,uBAAuBwP,gBACpC,CAKA7oC,qBAAqBwoC,QACnB,MAAM7vD,KAAOouD,2BAA2BoB,qBACxC,MAAMtvD,KAAO4pD,WAAW9pD,KAAM,CAACsuD,SAAUuB,OAAOvB,WAEhD,OAAO,IAAI5N,uBAAuB,CAChCjV,KAAM,CACJ,CAACsB,OAAQ8iB,OAAOP,YAAapW,SAAU,MAAOC,WAAY,MAC1D,CAACpM,OAAQ8iB,OAAOjB,SAAU1V,SAAU,MAAOC,WAAY,MACvD,CACEpM,OAAQsZ,iCACRnN,SAAU,MACVC,WAAY,OAEd,CACEpM,OAAQuZ,mBACRpN,SAAU,MACVC,WAAY,OAEd,CAACpM,OAAQ8iB,OAAOvF,iBAAkBpR,SAAU,KAAMC,WAAY,QAEhE9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAMAmnB,sBAAsBwoC,QACpB,MAAM7vD,KAAOouD,2BAA2BqB,sBACxC,MAAMvvD,KAAO4pD,WAAW9pD,KAAM,CAC5Bm4C,WAAYrqB,SAAS+hC,OAAOH,oBAAoB5hC,cAGlD,OAAO,IAAI4yB,uBAAuB,CAChCjV,KAAM,CACJ,CAACsB,OAAQ8iB,OAAOP,YAAapW,SAAU,MAAOC,WAAY,MAC1D,CAACpM,OAAQ8iB,OAAOvF,iBAAkBpR,SAAU,KAAMC,WAAY,QAEhE9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,gBACEwoC,QAEA,IAAI3vD,KACJ,IAAIurC,KACJ,GAAI,eAAgBokB,OAAQ,CAC1B,MAAM7vD,KAAOouD,2BAA2Ba,iBACxC/uD,KAAO4pD,WAAW9pD,KAAM,CACtBmiB,KAAM2L,SAAS+hC,OAAOf,WAAWhhC,YACjCvU,KAAMs2C,OAAOt2C,KACbg1C,MAAOsB,OAAOtB,MACdliB,UAAWve,SAAS+hC,OAAOxjB,UAAUve,cAEvC2d,KAAO,CACL,CAACsB,OAAQ8iB,OAAOb,cAAe9V,SAAU,MAAOC,WAAY,MAC5D,CAACpM,OAAQ8iB,OAAOf,WAAY5V,SAAU,KAAMC,WAAY,OAE5D,KAAO,CACL,MAAMn5C,KAAOouD,2BAA2BW,SACxC7uD,KAAO4pD,WAAW9pD,KAAM,CACtBuuD,MAAOsB,OAAOtB,QAEhB9iB,KAAO,CAAC,CAACsB,OAAQ8iB,OAAOb,cAAe9V,SAAU,KAAMC,WAAY,MACrE,CAEA,OAAO,IAAIuH,uBAAuB,CAChCjV,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,EAnTWyvD,cASJtjB,UAAuB,IAAIN,UAChC,oCC1tBJ,MAAMokB,WAAaja,iBAAmB,IAK/B,MAAMka,OAIX7kD,cAAc,CAad8b,2BAA2Bg2B,YACzB,OACE,GACChiD,KAAK6jB,KAAKm+B,WAAa+S,OAAOC,WAC7B,EACA,EAEN,CAYAhpC,kBACE87B,WACArK,MACAwX,QACAjkB,UACAnsC,MAEA,CACE,MAAMqwD,oBAAsBpN,WAAWqN,kCACrCtwD,KAAKxH,QAIP,MAAM+3D,kBAAoBtN,WAAWuN,eACnCJ,QAAQllC,UACR,aAGF,IAAIuyB,YAAkC,KACtC,GAAI8S,cAAgB,KAAM,CACxB,GAAIA,YAAYE,WAAY,CAC1B9zD,QAAQC,MAAM,sDACd,OAAO,KACT,CAEA,GAAI2zD,YAAYvwD,KAAKxH,SAAWwH,KAAKxH,OAAQ,CAC3CilD,YAAcA,aAAe,IAAIgD,YACjChD,YAAYhrC,IACVg9C,cAAcr+B,SAAS,CACrB09B,cAAesB,QAAQllC,UACvBmjC,MAAOruD,KAAKxH,SAGlB,CAEA,IAAK+3D,YAAYG,MAAMxuD,OAAOiqC,WAAY,CACxCsR,YAAcA,aAAe,IAAIgD,YACjChD,YAAYhrC,IACVg9C,cAActkB,OAAO,CACnB2jB,cAAesB,QAAQllC,UACvBihB,sBAGN,CAEA,GAAIokB,YAAYnC,SAAWiC,cAAe,CACxC5S,YAAcA,aAAe,IAAIgD,YACjChD,YAAYhrC,IACVg9C,cAAckB,SAAS,CACrBpC,WAAY3V,MAAM1tB,UAClBwjC,SAAU0B,QAAQllC,UAClBkjC,SAAUiC,cAAgBE,YAAYnC,WAG5C,CACF,KAAO,CACL3Q,aAAc,IAAIgD,aAAchuC,IAC9Bg9C,cAAcI,cAAc,CAC1BtB,WAAY3V,MAAM1tB,UAClBsjC,iBAAkB4B,QAAQllC,UAC1BkjC,SAAUiC,cAAgB,EAAIA,cAAgB,EAC9ChC,MAAOruD,KAAKxH,OACZ2zC,sBAGN,CAIA,GAAIsR,cAAgB,KAAM,OAClBoL,0BACJ5F,WACAxF,YACA,CAAC7E,MAAOwX,SACR,CACEnH,WAAY,aAGlB,CACF,CAEA,MAAM2H,WAAalZ,cAAAA,OAQjB,CACAA,cAAAA,IAAiB,eACjBA,cAAgBtV,IAAC,UACjBsV,kBAAiB,eACjBA,cAAAA,IAAiB,sBACjBA,cAAgB5B,IACd4B,iBAAgB,QAChBA,cAAAA,OAAoBA,cAAgBtV,OAAK,GACzC,WAIJ,MAAM+tB,UAAYD,OAAOC,UACzB,IAAI91D,OAAS,EACb,IAAIoF,MAAQO,KACZ,IAAI6wD,aAAe,GACnB,MAAOpxD,MAAMjH,OAAS,EAAG,CACvB,MAAMkN,MAAQjG,MAAMF,MAAM,EAAG4wD,WAC7B,MAAMnwD,KAAO5D,cAAMA,OAAC2C,MAAMoxD,UAAY,IACtCS,WAAWjiD,OACT,CACE2oC,YAAa,EACbj9C,cACAqL,MAAOA,MACPiK,YAAa,EACbmhD,mBAAoB,GAEtB9wD,MAGF,MAAMy9C,aAAc,IAAIgD,aAAchuC,IAAI,CACxC84B,KAAM,CAAC,CAACsB,OAAQujB,QAAQllC,UAAW8tB,SAAU,KAAMC,WAAY,OAC/D9M,oBACAnsC,YAEF6wD,aAAaj3D,KACXivD,0BAA0B5F,WAAYxF,YAAa,CAAC7E,MAAOwX,SAAU,CACnEnH,WAAY,eAKhB,GAAIhG,WAAW8N,aAAattD,SAAS,cAAe,CAClD,MAAMutD,oBAAsB,QACtBvH,MAAM,IAAOuH,oBACrB,CAEA32D,QAAU81D,UACV1wD,MAAQA,MAAMF,MAAM4wD,UACtB,OACMjJ,QAAQ+J,IAAIJ,cAGlB,CACE,MAAMD,WAAalZ,cAAmB5H,OAAwB,CAC5D4H,cAAAA,IAAiB,iBAGnB,MAAM13C,KAAO5D,cAAMA,OAAC2C,MAAM6xD,WAAW/f,MACrC+f,WAAWjiD,OACT,CACE2oC,YAAa,GAEft3C,MAGF,MAAMy9C,aAAc,IAAIgD,aAAchuC,IAAI,CACxC84B,KAAM,CACJ,CAACsB,OAAQujB,QAAQllC,UAAW8tB,SAAU,KAAMC,WAAY,MACxD,CAACpM,OAAQuZ,mBAAoBpN,SAAU,MAAOC,WAAY,QAE5D9M,oBACAnsC,YAEF,MAAMkxD,iBAAmB,YACzB,MAAMC,wBAA0BlO,WAAWkG,gBACzC1L,YACA,CAAC7E,MAAOwX,SACR,CAACpH,oBAAqBkI,mBAExB,MAAMzmC,QAACA,QAAOnvB,MAAEA,aAAe2nD,WAAWoG,mBACxC,CACEjT,UAAW+a,kBACXvQ,qBAAsBnD,YAAYmD,qBAClCM,UAAWzD,YAAYlC,iBAEzB2V,kBAEF,GAAI51D,MAAMoxC,IAAK,CACb,MAAM,IAAI9zC,MACR,eAAeu4D,6BAA6B5P,KAAKC,UAAUlmD,UAE/D,CAGA,MACE,KACA,CACA,IACE,MAAM81D,kBAAoBnO,WAAWoO,QAAQ,CAC3CpI,WAAYiI,mBAEd,GAAIE,YAAc3mC,QAAQ6mC,KAAM,CAC9B,KACF,CACF,CAAE,MACA,OAEI,IAAIpK,SAAQC,SAChBwC,WAAWxC,QAAShsD,KAAKo2D,MAAMxL,YAAc,KAEjD,CACF,CAGA,OAAO,IACT,EAjPWmK,OASJC,UAAoBF,iBCvBhBuB,sBAAwB,IAAI3lB,UACvC,+CAQK,MAAM4lB,UAOXtqC,2BAA2Bg2B,YACzB,OAAO+S,OAAOwB,oBAAoBvU,WACpC,CAYAh2B,YACE87B,WACArK,MACAwX,QACAuB,IACAC,iBAEA,OAAO1B,OAAO2B,KAAK5O,WAAYrK,MAAOwX,QAASwB,gBAAiBD,IAClE,qMChDF,IAAIG,YAAc/0D,OAAOE,UAAUgD,SACnC,IAAI8xD,QAAUh1D,OAAOwuC,MAAQ,SAAS3rC,KACpC,IAAI2rC,KAAO,GACX,IAAK,IAAI9/B,QAAQ7L,IAAK,CACrB2rC,KAAK3xC,KAAK6R,MAEX,OAAO8/B,IACP,EAEF,SAASiW,UAAU1+C,IAAKkvD,aACvB,IAAI15D,EAAG+J,IAAKD,IAAKmpC,KAAMjrB,IAAK2xC,QAASC,MACrC,GAAIpvD,MAAQ,KAAM,CACjB,MAAO,OAER,GAAIA,MAAQ,MAAO,CAClB,MAAO,QAER,cAAeA,KACd,IAAK,SACJ,GAAIA,MAAQ,KAAM,CACjB,OAAO,IACX,MAAU,GAAIA,IAAI2B,eAAiB3B,IAAI2B,SAAW,WAAY,CAC1D,OAAO+8C,UAAU1+C,IAAI2B,SAAUutD,YACnC,KAAU,CACNE,MAAQJ,YAAYhxD,KAAKgC,KACzB,GAAIovD,QAAU,iBAAkB,CAC/B9vD,IAAM,IACNC,IAAMS,IAAItK,OAAS,EACnB,IAAIF,EAAI,EAAGA,EAAI+J,IAAK/J,IAAK,CACxB8J,KAAOo/C,UAAU1+C,IAAIxK,GAAI,MAAQ,IAElC,GAAI+J,KAAO,EAAG,CACbD,KAAOo/C,UAAU1+C,IAAIxK,GAAI,MAE1B,OAAO8J,IAAM,GAClB,MAAW,GAAI8vD,QAAU,kBAAmB,CAEvC3mB,KAAOwmB,QAAQjvD,KAAKg/C,OACpBz/C,IAAMkpC,KAAK/yC,OACX4J,IAAM,GACN9J,EAAI,EACJ,MAAOA,EAAI+J,IAAK,CACfie,IAAMirB,KAAKjzC,GACX25D,QAAUzQ,UAAU1+C,IAAIwd,KAAM,OAC9B,GAAI2xC,UAAY10D,UAAW,CAC1B,GAAI6E,IAAK,CACRA,KAAO,IAERA,KAAOm/C,KAAKC,UAAUlhC,KAAO,IAAM2xC,QAEpC35D,IAED,MAAO,IAAM8J,IAAM,GACxB,KAAW,CACN,OAAOm/C,KAAKC,UAAU1+C,MAGzB,IAAK,WACL,IAAK,YACJ,OAAOkvD,YAAc,KAAOz0D,UAC7B,IAAK,SACJ,OAAOgkD,KAAKC,UAAU1+C,KACvB,QACC,OAAO0B,SAAS1B,KAAOA,IAAM,MAIlBqvD,sBAAG,SAASrvD,KACzB,IAAIsvD,UAAY5Q,UAAU1+C,IAAK,OAC/B,GAAIsvD,YAAc70D,UAAW,CAC5B,MAAO,GAAI60D,UAEZ,uKC7DD,MAAMC,oBAAoBv0D,UACtBuN,YAAYinD,QAASC,UACjB,IAAIC,OACJ,MAAM7mD,QAAEA,QAAO8mD,YAAEA,eAAgBC,MAASJ,QAC1C,MAAMK,KAAEA,MAASL,QACjB,MAAMxmD,IAAM6mD,KAAKn6D,SAAW,EAAImT,QAAU,YAAYgnD,KAAK94D,KAAK,WAAW8R,UAC3EL,MAAMmnD,aAAe3mD,KACrB,GAAI2mD,aAAe,KACfn1D,KAAKkuD,MAAQ1/C,IACjB/O,OAAOouC,OAAO7tC,KAAMo1D,MACpBp1D,KAAKmO,KAAOnO,KAAK+N,YAAYI,KAC7BnO,KAAKi1D,SAAW,IACJC,SAAWA,OAAS,CAACF,WAAYC,YAErD,EAMA,SAASK,WAAWvyD,GAChB,OAAOwyD,SAASxyD,WAAaA,EAAEnE,OAAO42D,YAAc,UACxD,CAIA,SAASD,SAASxyD,GACd,cAAcA,IAAM,UAAYA,GAAK,IACzC,CAIA,SAAS0yD,iBAAiB1yD,GACtB,OAAOwyD,SAASxyD,KAAOjI,MAAM2H,QAAQM,EACzC,CAcA,SAAS2yD,MAAM13D,OACX,UAAWA,QAAU,SAAU,CAC3B,OAAOA,MAAM2E,UACrB,CACI,cAAc3E,QAAU,SAAWimD,KAAKC,UAAUlmD,OAAS,GAAGA,OAClE,CAKA,SAAS23D,cAAcpnD,OACnB,MAAMqnD,KAAEA,KAAI53D,MAAEA,OAAUuQ,MAAMyzB,OAC9B,OAAO4zB,KAAO31D,UAAYjC,KAC9B,CAIA,SAAS63D,UAAU73C,OAAQmP,QAASqlB,OAAQx0C,OACxC,GAAIggB,SAAW,KAAM,CACjB,MACR,MACS,GAAIA,SAAW,MAAO,CACvBA,OAAS,CAAE,CACnB,MACS,UAAWA,SAAW,SAAU,CACjCA,OAAS,CAAE3P,QAAS2P,OAC5B,CACI,MAAMq3C,KAAEA,KAAIS,OAAEA,QAAW3oC,QACzB,MAAM3qB,KAAEA,MAASgwC,OACjB,MAAMujB,WAAEA,WAAU1nD,QAAEA,QAAU,8BAA8B7L,SAASuzD,WAAa,sBAAsBA,eAAiB,uBAAuBL,MAAM13D,YAAgBggB,OACtK,MAAO,CACHhgB,YACAwE,UACAuzD,sBACA/yC,IAAKqyC,KAAKA,KAAKn6D,OAAS,GACxBm6D,UACAS,iBACG93C,OACH3P,gBAER,CAIA,SAAU2nD,WAAWh4C,OAAQmP,QAASqlB,OAAQx0C,OAC1C,IAAKs3D,WAAWt3C,QAAS,CACrBA,OAAS,CAACA,OAClB,CACI,IAAK,MAAMQ,KAAKR,OAAQ,CACpB,MAAMg3C,QAAUa,UAAUr3C,EAAG2O,QAASqlB,OAAQx0C,OAC9C,GAAIg3D,QAAS,OACHA,OAClB,CACA,CACA,CAKA,SAAUiB,IAAIj4D,MAAOw0C,OAAQjlB,QAAU,CAAA,GACnC,MAAM8nC,KAAEA,KAAO,GAAES,OAAEA,OAAS,CAAC93D,OAAMk4D,OAAEA,OAAS,MAAKnxC,KAAEA,KAAO,OAAUwI,QACtE,MAAMzF,IAAM,CAAEutC,UAAMS,cAAQ/wC,WAC5B,GAAImxC,OAAQ,CACRl4D,MAAQw0C,OAAO2jB,QAAQn4D,MAAO8pB,IACtC,CACI,IAAIgkC,OAAS,QACb,IAAK,MAAMkJ,WAAWxiB,OAAO4jB,UAAUp4D,MAAO8pB,KAAM,CAChDktC,QAAQG,YAAc5nC,QAAQlf,QAC9By9C,OAAS,iBACH,CAACkJ,QAAS/0D,UACxB,CACI,IAAK,IAAK2b,EAAGD,EAAGje,KAAM80C,OAAOn1B,QAAQrf,MAAO8pB,KAAM,CAC9C,MAAMuuC,GAAKJ,IAAIt6C,EAAGje,EAAG,CACjB23D,KAAMz5C,IAAM3b,UAAYo1D,KAAO,IAAIA,KAAMz5C,GACzCk6C,OAAQl6C,IAAM3b,UAAY61D,OAAS,IAAIA,OAAQn6C,GAC/Cu6C,cACAnxC,UACA1W,QAASkf,QAAQlf,UAErB,IAAK,MAAMkmB,KAAK8hC,GAAI,CAChB,GAAI9hC,EAAE,GAAI,CACNu3B,OAASv3B,EAAE,GAAGwhC,YAAc,KAAO,cAAgB,iBAC7C,CAACxhC,EAAE,GAAIt0B,UAC7B,MACiB,GAAIi2D,OAAQ,CACbv6C,EAAI4Y,EAAE,GACN,GAAI3Y,IAAM3b,UAAW,CACjBjC,MAAQ2d,CAC5B,MACqB,GAAI3d,iBAAiBovC,IAAK,CAC3BpvC,MAAMuF,IAAIqY,EAAGD,EACjC,MACqB,GAAI3d,iBAAiB+nD,IAAK,CAC3B/nD,MAAMmX,IAAIwG,EAC9B,MACqB,GAAI45C,SAASv3D,OAAQ,CACtB,GAAI2d,IAAM1b,WAAa2b,KAAK5d,MACxBA,MAAM4d,GAAKD,CACnC,CACA,CACA,CACA,CACI,GAAImwC,SAAW,YAAa,CACxB,IAAK,MAAMkJ,WAAWxiB,OAAO8jB,QAAQt4D,MAAO8pB,KAAM,CAC9CktC,QAAQG,YAAc5nC,QAAQlf,QAC9By9C,OAAS,mBACH,CAACkJ,QAAS/0D,UAC5B,CACA,CACI,GAAI6rD,SAAW,QAAS,MACd,CAAC7rD,UAAWjC,MAC1B,CACA,CAOA,MAAM2vC,OACF5/B,YAAYwoD,OACR,MAAM/zD,KAAEA,KAAI8pC,OAAEA,OAAM8pB,UAAEA,UAASE,QAAEA,QAAOH,QAAEA,QAAU,CAACn4D,OAAUA,OAAKqf,QAAEA,QAAU,YAAa,GAASk5C,MACtGv2D,KAAKwC,KAAOA,KACZxC,KAAKssC,OAASA,OACdtsC,KAAKqd,QAAUA,QACfrd,KAAKm2D,QAAUA,QACf,GAAIC,UAAW,CACXp2D,KAAKo2D,UAAY,CAACp4D,MAAOmvB,WACrB,MAAMnP,OAASo4C,UAAUp4D,MAAOmvB,SAChC,OAAO6oC,WAAWh4C,OAAQmP,QAASntB,KAAMhC,MAAM,CAE/D,KACa,CACDgC,KAAKo2D,UAAY,IAAM,EACnC,CACQ,GAAIE,QAAS,CACTt2D,KAAKs2D,QAAU,CAACt4D,MAAOmvB,WACnB,MAAMnP,OAASs4C,QAAQt4D,MAAOmvB,SAC9B,OAAO6oC,WAAWh4C,OAAQmP,QAASntB,KAAMhC,MAAM,CAE/D,KACa,CACDgC,KAAKs2D,QAAU,IAAM,EACjC,CACA,CAII9lC,OAAOxyB,MAAOqQ,SACV,OAAOmiB,OAAOxyB,MAAOgC,KAAMqO,QACnC,CAII+B,OAAOpS,MAAOqQ,SACV,OAAO+B,OAAOpS,MAAOgC,KAAMqO,QACnC,CAIImoD,GAAGx4D,OACC,OAAOw4D,GAAGx4D,MAAOgC,KACzB,CAMI+kB,KAAK/mB,MAAOqQ,SACR,OAAO0W,KAAK/mB,MAAOgC,KAAMqO,QACjC,CAUIooD,SAASz4D,MAAOuvB,QAAU,IACtB,OAAOkpC,WAASz4D,MAAOgC,KAAMutB,QACrC,EAKA,SAASiD,OAAOxyB,MAAOw0C,OAAQnkC,SAC3B,MAAM2P,OAASy4C,WAASz4D,MAAOw0C,OAAQ,CAAEnkC,kBACzC,GAAI2P,OAAO,GAAI,CACX,MAAMA,OAAO,EACrB,CACA,CAIA,SAAS5N,OAAOpS,MAAOw0C,OAAQnkC,SAC3B,MAAM2P,OAASy4C,WAASz4D,MAAOw0C,OAAQ,CAAE0jB,OAAQ,KAAM7nD,kBACvD,GAAI2P,OAAO,GAAI,CACX,MAAMA,OAAO,EACrB,KACS,CACD,OAAOA,OAAO,EACtB,CACA,CAIA,SAAS+G,KAAK/mB,MAAOw0C,OAAQnkC,SACzB,MAAM2P,OAASy4C,WAASz4D,MAAOw0C,OAAQ,CAAE0jB,OAAQ,KAAMnxC,KAAM,KAAM1W,kBACnE,GAAI2P,OAAO,GAAI,CACX,MAAMA,OAAO,EACrB,KACS,CACD,OAAOA,OAAO,EACtB,CACA,CAIA,SAASw4C,GAAGx4D,MAAOw0C,QACf,MAAMx0B,OAASy4C,WAASz4D,MAAOw0C,QAC/B,OAAQx0B,OAAO,EACnB,CAKA,SAASy4C,WAASz4D,MAAOw0C,OAAQjlB,QAAU,CAAA,GACvC,MAAMmpC,OAAST,IAAIj4D,MAAOw0C,OAAQjlB,SAClC,MAAMopC,MAAQhB,cAAce,QAC5B,GAAIC,MAAM,GAAI,CACV,MAAMr3D,MAAQ,IAAIy1D,YAAY4B,MAAM,IAAI,YACpC,IAAK,MAAMpiC,KAAKmiC,OAAQ,CACpB,GAAIniC,EAAE,GAAI,OACAA,EAAE,EAC5B,CACA,CACA,IACQ,MAAO,CAACj1B,MAAOW,UACvB,KACS,CACD,MAAM0b,EAAIg7C,MAAM,GAChB,MAAO,CAAC12D,UAAW0b,EAC3B,CACA,CAWA,SAASi7C,OAAOzoD,KAAMioD,WAClB,OAAO,IAAIzoB,OAAO,CAAEnrC,KAAM2L,KAAMm+B,OAAQ,KAAM8pB,qBAClD,CAoJA,SAASS,MACL,OAAOD,OAAO,OAAO,IAAM,MAC/B,CACA,SAASz0D,MAAM20D,SACX,OAAO,IAAInpB,OAAO,CACdnrC,KAAM,QACN8pC,OAAQwqB,QACRz5C,SAASrf,OACL,GAAI84D,SAAWh8D,MAAM2H,QAAQzE,OAAQ,CACjC,IAAK,MAAOhD,EAAG2gB,KAAM3d,MAAMqf,UAAW,MAC5B,CAACriB,EAAG2gB,EAAGm7C,QACjC,CACA,CACS,EACDX,QAAQn4D,OACJ,OAAOlD,MAAM2H,QAAQzE,OAASA,MAAMiE,QAAUjE,KACjD,EACDo4D,UAAUp4D,OACN,OAAQlD,MAAM2H,QAAQzE,QAClB,0CAA0C03D,MAAM13D,QACvD,GAET,CAYA,SAASue,UACL,OAAOq6C,OAAO,WAAY54D,cACRA,QAAU,WAEhC,CAwCA,SAASwS,SAASujC,OACd,OAAO6iB,OAAO,YAAa54D,OACfA,iBAAiB+1C,OACrB,gBAAgBA,MAAM5lC,kCAAkCunD,MAAM13D,UAE1E,CAkCA,SAAS+4D,QAAQ5kB,UACb,MAAM6kB,YAActB,MAAMvjB,UAC1B,MAAM5d,SAAW4d,SACjB,OAAO,IAAIxE,OAAO,CACdnrC,KAAM,UACN8pC,OAAQ/X,IAAM,UAAYA,IAAM,UAAYA,IAAM,UAAY4d,SAAW,KACzEikB,UAAUp4D,OACN,OAAQA,QAAUm0C,UACd,0BAA0B6kB,gCAAgCtB,MAAM13D,QACvE,GAET,CAyBA,SAASi5D,QACL,OAAOL,OAAO,SAAS,IAAM,OACjC,CAIA,SAASM,SAAS1kB,QACd,OAAO,IAAI7E,OAAO,IACX6E,OACH4jB,UAAW,CAACp4D,MAAO8pB,MAAQ9pB,QAAU,MAAQw0C,OAAO4jB,UAAUp4D,MAAO8pB,KACrEwuC,QAAS,CAACt4D,MAAO8pB,MAAQ9pB,QAAU,MAAQw0C,OAAO8jB,QAAQt4D,MAAO8pB,MAEzE,CAIA,SAASzJ,SACL,OAAOu4C,OAAO,UAAW54D,cACLA,QAAU,WAAaI,MAAMJ,QACzC,oCAAoC03D,MAAM13D,UAEtD,CA6CA,SAASm5D,SAAS3kB,QACd,OAAO,IAAI7E,OAAO,IACX6E,OACH4jB,UAAW,CAACp4D,MAAO8pB,MAAQ9pB,QAAUiC,WAAauyC,OAAO4jB,UAAUp4D,MAAO8pB,KAC1EwuC,QAAS,CAACt4D,MAAO8pB,MAAQ9pB,QAAUiC,WAAauyC,OAAO8jB,QAAQt4D,MAAO8pB,MAE9E,CAOA,SAASsvC,OAAOC,IAAKC,OACjB,OAAO,IAAI3pB,OAAO,CACdnrC,KAAM,SACN8pC,OAAQ,KACRjvB,SAASrf,OACL,GAAIu3D,SAASv3D,OAAQ,CACjB,IAAK,MAAM4d,KAAK5d,MAAO,CACnB,MAAM2d,EAAI3d,MAAM4d,QACV,CAACA,EAAGA,EAAGy7C,UACP,CAACz7C,EAAGD,EAAG27C,MACjC,CACA,CACS,EACDlB,UAAUp4D,OACN,OAAQy3D,iBAAiBz3D,QACrB,qCAAqC03D,MAAM13D,QAClD,EACDm4D,QAAQn4D,OACJ,OAAOy3D,iBAAiBz3D,OAAS,IAAKA,OAAUA,KACnD,GAET,CAmCA,SAAS8D,SACL,OAAO80D,OAAO,UAAW54D,cACNA,QAAU,UACrB,oCAAoC03D,MAAM13D,UAEtD,CAKA,SAAS24D,MAAMY,SACX,MAAMC,MAAQP,QACd,OAAO,IAAItpB,OAAO,CACdnrC,KAAM,QACN8pC,OAAQ,KACRjvB,SAASrf,OACL,GAAIlD,MAAM2H,QAAQzE,OAAQ,CACtB,MAAM9C,OAAS2C,KAAKkH,IAAIwyD,QAAQr8D,OAAQ8C,MAAM9C,QAC9C,IAAK,IAAIF,EAAI,EAAGA,EAAIE,OAAQF,IAAK,MACvB,CAACA,EAAGgD,MAAMhD,GAAIu8D,QAAQv8D,IAAMw8D,MACtD,CACA,CACS,EACDpB,UAAUp4D,OACN,OAAQlD,MAAM2H,QAAQzE,QAClB,oCAAoC03D,MAAM13D,QACjD,EACDm4D,QAAQn4D,OACJ,OAAOlD,MAAM2H,QAAQzE,OAASA,MAAMiE,QAAUjE,KACjD,GAET,CAOA,SAASwE,KAAK8pC,QACV,MAAM2B,KAAOxuC,OAAOwuC,KAAK3B,QACzB,OAAO,IAAIqB,OAAO,CACdnrC,KAAM,OACN8pC,cACAjvB,SAASrf,OACL,GAAIu3D,SAASv3D,OAAQ,CACjB,IAAK,MAAM4d,KAAKqyB,KAAM,MACZ,CAACryB,EAAG5d,MAAM4d,GAAI0wB,OAAO1wB,GAC/C,CACA,CACS,EACDw6C,UAAUp4D,OACN,OAAQy3D,iBAAiBz3D,QACrB,qCAAqC03D,MAAM13D,QAClD,EACDm4D,QAAQn4D,OACJ,OAAOy3D,iBAAiBz3D,OAAS,IAAKA,OAAUA,KACnD,GAET,CAIA,SAASu0C,MAAMglB,SACX,MAAMP,YAAcO,QAAQjhD,KAAK5Y,GAAMA,EAAE8E,OAAMjG,KAAK,OACpD,OAAO,IAAIoxC,OAAO,CACdnrC,KAAM,QACN8pC,OAAQ,KACR6pB,QAAQn4D,MAAO8pB,KACX,IAAK,MAAMhJ,KAAKy4C,QAAS,CACrB,MAAOj4D,MAAOm4D,SAAW34C,EAAE23C,SAASz4D,MAAO,CACvCk4D,OAAQ,KACRnxC,KAAM+C,IAAI/C,OAEd,IAAKzlB,MAAO,CACR,OAAOm4D,OAC3B,CACA,CACY,OAAOz5D,KACV,EACDo4D,UAAUp4D,MAAO8pB,KACb,MAAMmtC,SAAW,GACjB,IAAK,MAAMn2C,KAAKy4C,QAAS,CACrB,SAAUb,QAAUT,IAAIj4D,MAAO8gB,EAAGgJ,KAClC,MAAOne,OAAS+sD,OAChB,IAAK/sD,MAAM,GAAI,CACX,MAAO,EAC3B,KACqB,CACD,IAAK,MAAOqrD,WAAY0B,OAAQ,CAC5B,GAAI1B,QAAS,CACTC,SAAS34D,KAAK04D,QAC1C,CACA,CACA,CACA,CACY,MAAO,CACH,8CAA8CgC,gCAAgCtB,MAAM13D,YACjFi3D,SAEV,GAET,CAIA,SAASyC,UACL,OAAOd,OAAO,WAAW,IAAM,MACnC,CAYA,SAASV,OAAO1jB,OAAQnvB,UAAW8yC,SAC/B,OAAO,IAAIxoB,OAAO,IACX6E,OACH2jB,QAAS,CAACn4D,MAAO8pB,MACN0uC,GAAGx4D,MAAOqlB,WACXmvB,OAAO2jB,QAAQA,QAAQn4D,MAAO8pB,KAAMA,KACpC0qB,OAAO2jB,QAAQn4D,MAAO8pB,MAGxC,CC92BA,IAAIxV,gBACJ,IAAIqlD,MAAQ,IAAI98D,WAAW,IACZ,SAAS+8D,MAEtB,IAAKtlD,gBAAiB,CAGpBA,uBAAyBzB,SAAW,aAAeA,OAAOyB,iBAAmBzB,OAAOyB,gBAAgB2jC,KAAKplC,gBAAkBgnD,WAAa,oBAAsBA,SAASvlD,kBAAoB,YAAculD,SAASvlD,gBAAgB2jC,KAAK4hB,UAEvO,IAAKvlD,gBAAiB,CACpB,MAAM,IAAIhX,MAAM,2GACtB,CACA,CAEE,OAAOgX,gBAAgBqlD,MACzB,CClBA,IAAAG,MAAe,sHCEf,SAASrB,SAASsB,MAChB,cAAcA,OAAS,UAAYD,MAAME,KAAKD,KAChD,CCEA,IAAIE,UAAY,GAEhB,IAAK,IAAIj9D,EAAI,EAAGA,EAAI,MAAOA,EAAG,CAC5Bi9D,UAAU37D,MAAMtB,EAAI,KAAO2H,SAAS,IAAI+D,OAAO,GACjD,CAEA,SAASw9C,UAAUroD,KACjB,IAAIkB,OAAS2G,UAAUxI,OAAS,GAAKwI,UAAU,KAAOzD,UAAYyD,UAAU,GAAK,EAGjF,IAAIq0D,MAAQE,UAAUp8D,IAAIkB,OAAS,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAM,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAM,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAM,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAMk7D,UAAUp8D,IAAIkB,OAAS,IAAM,IAAMk7D,UAAUp8D,IAAIkB,OAAS,KAAOk7D,UAAUp8D,IAAIkB,OAAS,KAAOk7D,UAAUp8D,IAAIkB,OAAS,KAAOk7D,UAAUp8D,IAAIkB,OAAS,KAAOk7D,UAAUp8D,IAAIkB,OAAS,KAAOk7D,UAAUp8D,IAAIkB,OAAS,MAAMoG,cAMzf,IAAKszD,SAASsB,MAAO,CACnB,MAAMv3D,UAAU,8BACpB,CAEE,OAAOu3D,IACT,CCrBA,IAAIG,QAEJ,IAAIC,UAGJ,IAAIC,WAAa,EACjB,IAAIC,WAAa,EAEjB,SAASC,GAAG/qC,QAASltB,IAAKtD,QACxB,IAAI/B,EAAIqF,KAAOtD,QAAU,EACzB,IAAIqE,EAAIf,KAAO,IAAIvF,MAAM,IACzByyB,QAAUA,SAAW,CAAE,EACvB,IAAIgrC,KAAOhrC,QAAQgrC,MAAQL,QAC3B,IAAIM,SAAWjrC,QAAQirC,WAAav4D,UAAYstB,QAAQirC,SAAWL,UAInE,GAAII,MAAQ,MAAQC,UAAY,KAAM,CACpC,IAAIC,UAAYlrC,QAAQmrC,SAAWnrC,QAAQqqC,KAAOA,OAElD,GAAIW,MAAQ,KAAM,CAEhBA,KAAOL,QAAU,CAACO,UAAU,GAAK,EAAMA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAC/G,CAEI,GAAID,UAAY,KAAM,CAEpBA,SAAWL,WAAaM,UAAU,IAAM,EAAIA,UAAU,IAAM,KAClE,CACG,CAMD,IAAIE,MAAQprC,QAAQorC,QAAU14D,UAAYstB,QAAQorC,MAAQC,KAAKC,MAG/D,IAAIC,MAAQvrC,QAAQurC,QAAU74D,UAAYstB,QAAQurC,MAAQT,WAAa,EAEvE,IAAIU,GAAKJ,MAAQP,YAAcU,MAAQT,YAAc,IAErD,GAAIU,GAAK,GAAKxrC,QAAQirC,WAAav4D,UAAW,CAC5Cu4D,SAAWA,SAAW,EAAI,KAC3B,CAID,IAAKO,GAAK,GAAKJ,MAAQP,aAAe7qC,QAAQurC,QAAU74D,UAAW,CACjE64D,MAAQ,CACT,CAGD,GAAIA,OAAS,IAAO,CAClB,MAAM,IAAIx9D,MAAM,kDACpB,CAEE88D,WAAaO,MACbN,WAAaS,MACbX,UAAYK,SAEZG,OAAS,YAET,IAAIK,KAAOL,MAAQ,WAAa,IAAQG,OAAS,WACjD13D,EAAEpG,KAAOg+D,KAAO,GAAK,IACrB53D,EAAEpG,KAAOg+D,KAAO,GAAK,IACrB53D,EAAEpG,KAAOg+D,KAAO,EAAI,IACpB53D,EAAEpG,KAAOg+D,GAAK,IAEd,IAAIC,IAAMN,MAAQ,WAAc,IAAQ,UACxCv3D,EAAEpG,KAAOi+D,MAAQ,EAAI,IACrB73D,EAAEpG,KAAOi+D,IAAM,IAEf73D,EAAEpG,KAAOi+D,MAAQ,GAAK,GAAM,GAE5B73D,EAAEpG,KAAOi+D,MAAQ,GAAK,IAEtB73D,EAAEpG,KAAOw9D,WAAa,EAAI,IAE1Bp3D,EAAEpG,KAAOw9D,SAAW,IAEpB,IAAK,IAAIl0D,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAC1BlD,EAAEpG,EAAIsJ,GAAKi0D,KAAKj0D,EACpB,CAEE,OAAOjE,KAAO6jD,UAAU9iD,EAC1B,CC1FA,SAAS83D,MAAMnB,MACb,IAAKtB,SAASsB,MAAO,CACnB,MAAMv3D,UAAU,eACpB,CAEE,IAAImb,EACJ,IAAI9f,IAAM,IAAIhB,WAAW,IAEzBgB,IAAI,IAAM8f,EAAIlV,SAASsxD,KAAK91D,MAAM,EAAG,GAAI,OAAS,GAClDpG,IAAI,GAAK8f,IAAM,GAAK,IACpB9f,IAAI,GAAK8f,IAAM,EAAI,IACnB9f,IAAI,GAAK8f,EAAI,IAEb9f,IAAI,IAAM8f,EAAIlV,SAASsxD,KAAK91D,MAAM,EAAG,IAAK,OAAS,EACnDpG,IAAI,GAAK8f,EAAI,IAEb9f,IAAI,IAAM8f,EAAIlV,SAASsxD,KAAK91D,MAAM,GAAI,IAAK,OAAS,EACpDpG,IAAI,GAAK8f,EAAI,IAEb9f,IAAI,IAAM8f,EAAIlV,SAASsxD,KAAK91D,MAAM,GAAI,IAAK,OAAS,EACpDpG,IAAI,GAAK8f,EAAI,IAGb9f,IAAI,KAAO8f,EAAIlV,SAASsxD,KAAK91D,MAAM,GAAI,IAAK,KAAO,cAAgB,IACnEpG,IAAI,IAAM8f,EAAI,WAAc,IAC5B9f,IAAI,IAAM8f,IAAM,GAAK,IACrB9f,IAAI,IAAM8f,IAAM,GAAK,IACrB9f,IAAI,IAAM8f,IAAM,EAAI,IACpB9f,IAAI,IAAM8f,EAAI,IACd,OAAO9f,GACT,CC7BA,SAASs9D,cAAcr0D,KACrBA,IAAMs0D,SAAS3L,mBAAmB3oD,MAElC,IAAIsD,MAAQ,GAEZ,IAAK,IAAIpN,EAAI,EAAGA,EAAI8J,IAAI5J,SAAUF,EAAG,CACnCoN,MAAM9L,KAAKwI,IAAI3J,WAAWH,GAC9B,CAEE,OAAOoN,KACT,CAEO,IAAIixD,IAAM,uCACV,IAAIC,IAAM,uCACF,SAAAC,IAAUprD,KAAMiwC,QAASob,UACtC,SAASC,aAAaz7D,MAAO07D,UAAWr5D,IAAKtD,QAC3C,UAAWiB,QAAU,SAAU,CAC7BA,MAAQm7D,cAAcn7D,MAC5B,CAEI,UAAW07D,YAAc,SAAU,CACjCA,UAAYR,MAAMQ,UACxB,CAEI,GAAIA,UAAUx+D,SAAW,GAAI,CAC3B,MAAMsF,UAAU,mEACjB,CAKD,IAAI4H,MAAQ,IAAIvN,WAAW,GAAKmD,MAAM9C,QACtCkN,MAAM7E,IAAIm2D,WACVtxD,MAAM7E,IAAIvF,MAAO07D,UAAUx+D,QAC3BkN,MAAQoxD,SAASpxD,OACjBA,MAAM,GAAKA,MAAM,GAAK,GAAOg2C,QAC7Bh2C,MAAM,GAAKA,MAAM,GAAK,GAAO,IAE7B,GAAI/H,IAAK,CACPtD,OAASA,QAAU,EAEnB,IAAK,IAAI/B,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3BqF,IAAItD,OAAS/B,GAAKoN,MAAMpN,EAChC,CAEM,OAAOqF,GACb,CAEI,OAAO6jD,UAAU97C,MAClB,CAGD,IACEqxD,aAAatrD,KAAOA,IACxB,CAAI,MAAOihC,KAAO,CAGhBqqB,aAAaJ,IAAMA,IACnBI,aAAaH,IAAMA,IACnB,OAAOG,YACT,CC3CA,SAASE,IAAIvxD,OACX,UAAWA,QAAU,SAAU,CAC7B,IAAIoG,IAAM4qD,SAAS3L,mBAAmBrlD,QAEtCA,MAAQ,IAAIvN,WAAW2T,IAAItT,QAE3B,IAAK,IAAIF,EAAI,EAAGA,EAAIwT,IAAItT,SAAUF,EAAG,CACnCoN,MAAMpN,GAAKwT,IAAIrT,WAAWH,EAChC,CACA,CAEE,OAAO4+D,qBAAqBC,WAAWC,aAAa1xD,OAAQA,MAAMlN,OAAS,GAC7E,CAMA,SAAS0+D,qBAAqBrrD,OAC5B,IAAIlS,OAAS,GACb,IAAI09D,SAAWxrD,MAAMrT,OAAS,GAC9B,IAAI8+D,OAAS,mBAEb,IAAK,IAAIh/D,EAAI,EAAGA,EAAI++D,SAAU/+D,GAAK,EAAG,CACpC,IAAI+H,EAAIwL,MAAMvT,GAAK,KAAOA,EAAI,GAAK,IACnC,IAAIke,IAAMzS,SAASuzD,OAAOz2B,OAAOxgC,IAAM,EAAI,IAAQi3D,OAAOz2B,OAAOxgC,EAAI,IAAO,IAC5E1G,OAAOC,KAAK4c,IAChB,CAEE,OAAO7c,MACT,CAMA,SAAS49D,gBAAgBC,cACvB,OAAQA,aAAe,KAAO,GAAK,GAAK,GAAK,CAC/C,CAMA,SAASL,WAAW92D,EAAG9H,KAErB8H,EAAE9H,KAAO,IAAM,KAAQA,IAAM,GAC7B8H,EAAEk3D,gBAAgBh/D,KAAO,GAAKA,IAC9B,IAAI6H,EAAI,WACR,IAAI1B,GAAK,UACT,IAAInD,GAAK,WACT,IAAIR,EAAI,UAER,IAAK,IAAIzC,EAAI,EAAGA,EAAI+H,EAAE7H,OAAQF,GAAK,GAAI,CACrC,IAAIm/D,KAAOr3D,EACX,IAAIs3D,KAAOh5D,EACX,IAAIi5D,KAAOp8D,EACX,IAAIq8D,KAAO78D,EACXqF,EAAIy3D,MAAMz3D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,GAAI,GAAI,WAChCyC,EAAI88D,MAAM98D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,IAAK,WACrCiD,EAAIs8D,MAAMt8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,GAAI,GAAI,WACpCoG,EAAIm5D,MAAMn5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,IAAK,YACrC8H,EAAIy3D,MAAMz3D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,GAAI,WACpCyC,EAAI88D,MAAM98D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,GAAI,YACpCiD,EAAIs8D,MAAMt8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,GAAI,IAAK,YACrCoG,EAAIm5D,MAAMn5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,IAAK,UACrC8H,EAAIy3D,MAAMz3D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,EAAG,YACnCyC,EAAI88D,MAAM98D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,IAAK,YACrCiD,EAAIs8D,MAAMt8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,IAAK,IAAK,OACtCoG,EAAIm5D,MAAMn5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,IAAK,IAAK,YACtC8H,EAAIy3D,MAAMz3D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,IAAK,EAAG,YACpCyC,EAAI88D,MAAM98D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,IAAK,IAAK,UACtCiD,EAAIs8D,MAAMt8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,IAAK,IAAK,YACtCoG,EAAIm5D,MAAMn5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,IAAK,GAAI,YACrC8H,EAAI03D,MAAM13D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,GAAI,WACpCyC,EAAI+8D,MAAM/8D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,GAAI,YACpCiD,EAAIu8D,MAAMv8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,IAAK,GAAI,WACrCoG,EAAIo5D,MAAMp5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,GAAI,IAAK,WACjC8H,EAAI03D,MAAM13D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,GAAI,WACpCyC,EAAI+8D,MAAM/8D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,IAAK,EAAG,UACpCiD,EAAIu8D,MAAMv8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,IAAK,IAAK,WACtCoG,EAAIo5D,MAAMp5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,IAAK,WACrC8H,EAAI03D,MAAM13D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,EAAG,WACnCyC,EAAI+8D,MAAM/8D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,IAAK,GAAI,YACrCiD,EAAIu8D,MAAMv8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,GAAI,IAAK,WACrCoG,EAAIo5D,MAAMp5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,GAAI,YACpC8H,EAAI03D,MAAM13D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,IAAK,GAAI,YACrCyC,EAAI+8D,MAAM/8D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,GAAI,UACpCiD,EAAIu8D,MAAMv8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,GAAI,GAAI,YACpCoG,EAAIo5D,MAAMp5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,IAAK,IAAK,YACtC8H,EAAI23D,MAAM33D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,GAAI,QACpCyC,EAAIg9D,MAAMh9D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,IAAK,YACrCiD,EAAIw8D,MAAMx8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,IAAK,GAAI,YACrCoG,EAAIq5D,MAAMr5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,IAAK,IAAK,UACtC8H,EAAI23D,MAAM33D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,GAAI,YACpCyC,EAAIg9D,MAAMh9D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,GAAI,YACpCiD,EAAIw8D,MAAMx8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,GAAI,IAAK,WACrCoG,EAAIq5D,MAAMr5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,IAAK,IAAK,YACtC8H,EAAI23D,MAAM33D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,IAAK,EAAG,WACpCyC,EAAIg9D,MAAMh9D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,GAAI,IAAK,WACjCiD,EAAIw8D,MAAMx8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,GAAI,IAAK,WACrCoG,EAAIq5D,MAAMr5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,GAAI,UACpC8H,EAAI23D,MAAM33D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,GAAI,WACpCyC,EAAIg9D,MAAMh9D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,IAAK,IAAK,WACtCiD,EAAIw8D,MAAMx8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,IAAK,GAAI,WACrCoG,EAAIq5D,MAAMr5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,IAAK,WACrC8H,EAAI43D,MAAM53D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,GAAI,GAAI,WAChCyC,EAAIi9D,MAAMj9D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,GAAI,YACpCiD,EAAIy8D,MAAMz8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,IAAK,IAAK,YACtCoG,EAAIs5D,MAAMt5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,IAAK,UACrC8H,EAAI43D,MAAM53D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,IAAK,EAAG,YACpCyC,EAAIi9D,MAAMj9D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,GAAI,IAAK,YACrCiD,EAAIy8D,MAAMz8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,IAAK,IAAK,SACtCoG,EAAIs5D,MAAMt5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,IAAK,YACrC8H,EAAI43D,MAAM53D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,EAAG,YACnCyC,EAAIi9D,MAAMj9D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,IAAK,IAAK,UACtCiD,EAAIy8D,MAAMz8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,GAAI,IAAK,YACrCoG,EAAIs5D,MAAMt5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,IAAK,GAAI,YACrC8H,EAAI43D,MAAM53D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAE/H,EAAI,GAAI,GAAI,WACpCyC,EAAIi9D,MAAMj9D,EAAGqF,EAAG1B,EAAGnD,EAAG8E,EAAE/H,EAAI,IAAK,IAAK,YACtCiD,EAAIy8D,MAAMz8D,EAAGR,EAAGqF,EAAG1B,EAAG2B,EAAE/H,EAAI,GAAI,GAAI,WACpCoG,EAAIs5D,MAAMt5D,EAAGnD,EAAGR,EAAGqF,EAAGC,EAAE/H,EAAI,GAAI,IAAK,WACrC8H,EAAI63D,QAAQ73D,EAAGq3D,MACf/4D,EAAIu5D,QAAQv5D,EAAGg5D,MACfn8D,EAAI08D,QAAQ18D,EAAGo8D,MACf58D,EAAIk9D,QAAQl9D,EAAG68D,KACnB,CAEE,MAAO,CAACx3D,EAAG1B,EAAGnD,EAAGR,EACnB,CAOA,SAASq8D,aAAavrD,OACpB,GAAIA,MAAMrT,SAAW,EAAG,CACtB,MAAO,EACX,CAEE,IAAI0/D,QAAUrsD,MAAMrT,OAAS,EAC7B,IAAImB,OAAS,IAAI6X,YAAY+lD,gBAAgBW,UAE7C,IAAK,IAAI5/D,EAAI,EAAGA,EAAI4/D,QAAS5/D,GAAK,EAAG,CACnCqB,OAAOrB,GAAK,KAAOuT,MAAMvT,EAAI,GAAK,MAASA,EAAI,EACnD,CAEE,OAAOqB,MACT,CAOA,SAASs+D,QAAQ53D,EAAGC,GAClB,IAAI63D,KAAO93D,EAAI,QAAWC,EAAI,OAC9B,IAAI83D,KAAO/3D,GAAK,KAAOC,GAAK,KAAO63D,KAAO,IAC1C,OAAOC,KAAO,GAAKD,IAAM,KAC3B,CAMA,SAASE,cAAc/+D,IAAKg/D,KAC1B,OAAOh/D,KAAOg/D,IAAMh/D,MAAQ,GAAKg/D,GACnC,CAMA,SAASC,OAAO18C,EAAGzb,EAAG1B,EAAG2B,EAAGrF,EAAG62B,GAC7B,OAAOomC,QAAQI,cAAcJ,QAAQA,QAAQ73D,EAAGyb,GAAIo8C,QAAQ53D,EAAGwxB,IAAK72B,GAAI0D,EAC1E,CAEA,SAASm5D,MAAMz3D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAGrF,EAAG62B,GAC/B,OAAO0mC,OAAO75D,EAAInD,GAAKmD,EAAI3D,EAAGqF,EAAG1B,EAAG2B,EAAGrF,EAAG62B,EAC5C,CAEA,SAASimC,MAAM13D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAGrF,EAAG62B,GAC/B,OAAO0mC,OAAO75D,EAAI3D,EAAIQ,GAAKR,EAAGqF,EAAG1B,EAAG2B,EAAGrF,EAAG62B,EAC5C,CAEA,SAASkmC,MAAM33D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAGrF,EAAG62B,GAC/B,OAAO0mC,OAAO75D,EAAInD,EAAIR,EAAGqF,EAAG1B,EAAG2B,EAAGrF,EAAG62B,EACvC,CAEA,SAASmmC,MAAM53D,EAAG1B,EAAGnD,EAAGR,EAAGsF,EAAGrF,EAAG62B,GAC/B,OAAO0mC,OAAOh9D,GAAKmD,GAAK3D,GAAIqF,EAAG1B,EAAG2B,EAAGrF,EAAG62B,EAC1C,CClNA,IAAIhF,GAAKgqC,IAAI,KAAM,GAAMI,KCCzB,SAASuB,GAAG3tC,QAASltB,IAAKtD,QACxBwwB,QAAUA,SAAW,CAAE,EACvB,IAAI4tC,KAAO5tC,QAAQmrC,SAAWnrC,QAAQqqC,KAAOA,OAE7CuD,KAAK,GAAKA,KAAK,GAAK,GAAO,GAC3BA,KAAK,GAAKA,KAAK,GAAK,GAAO,IAE3B,GAAI96D,IAAK,CACPtD,OAASA,QAAU,EAEnB,IAAK,IAAI/B,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3BqF,IAAItD,OAAS/B,GAAKmgE,KAAKngE,EAC7B,CAEI,OAAOqF,GACX,CAEE,OAAO6jD,UAAUiX,KACnB,CCnBA,SAASzhD,EAAEhc,EAAGqF,EAAGC,EAAG0lB,GAClB,OAAQhrB,GACN,KAAK,EACH,OAAOqF,EAAIC,GAAKD,EAAI2lB,EAEtB,KAAK,EACH,OAAO3lB,EAAIC,EAAI0lB,EAEjB,KAAK,EACH,OAAO3lB,EAAIC,EAAID,EAAI2lB,EAAI1lB,EAAI0lB,EAE7B,KAAK,EACH,OAAO3lB,EAAIC,EAAI0lB,EAErB,CAEA,SAAS0yC,KAAKr4D,EAAGuB,GACf,OAAOvB,GAAKuB,EAAIvB,IAAM,GAAKuB,CAC7B,CAEA,SAAS+2D,KAAKjzD,OACZ,IAAIkzD,EAAI,CAAC,WAAY,WAAY,WAAY,YAC7C,IAAIvwC,EAAI,CAAC,WAAY,WAAY,WAAY,UAAY,YAEzD,UAAW3iB,QAAU,SAAU,CAC7B,IAAIoG,IAAM4qD,SAAS3L,mBAAmBrlD,QAEtCA,MAAQ,GAER,IAAK,IAAIpN,EAAI,EAAGA,EAAIwT,IAAItT,SAAUF,EAAG,CACnCoN,MAAM9L,KAAKkS,IAAIrT,WAAWH,GAChC,CACG,MAAM,IAAKF,MAAM2H,QAAQ2F,OAAQ,CAEhCA,MAAQtN,MAAM6E,UAAUsC,MAAMuB,KAAK4E,MACvC,CAEEA,MAAM9L,KAAK,KACX,IAAIuW,EAAIzK,MAAMlN,OAAS,EAAI,EAC3B,IAAIqgE,EAAI19D,KAAK6jB,KAAK7O,EAAI,IACtB,IAAI2oD,EAAI,IAAI1gE,MAAMygE,GAElB,IAAK,IAAIE,GAAK,EAAGA,GAAKF,IAAKE,GAAI,CAC7B,IAAI5/D,IAAM,IAAIqY,YAAY,IAE1B,IAAK,IAAIhO,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3BrK,IAAIqK,GAAKkC,MAAMqzD,GAAK,GAAKv1D,EAAI,IAAM,GAAKkC,MAAMqzD,GAAK,GAAKv1D,EAAI,EAAI,IAAM,GAAKkC,MAAMqzD,GAAK,GAAKv1D,EAAI,EAAI,IAAM,EAAIkC,MAAMqzD,GAAK,GAAKv1D,EAAI,EAAI,EAC3I,CAEIs1D,EAAEC,IAAM5/D,GACZ,CAEE2/D,EAAED,EAAI,GAAG,KAAOnzD,MAAMlN,OAAS,GAAK,EAAI2C,KAAKC,IAAI,EAAG,IACpD09D,EAAED,EAAI,GAAG,IAAM19D,KAAKQ,MAAMm9D,EAAED,EAAI,GAAG,KACnCC,EAAED,EAAI,GAAG,KAAOnzD,MAAMlN,OAAS,GAAK,EAAI,WAExC,IAAK,IAAIwgE,IAAM,EAAGA,IAAMH,IAAKG,IAAK,CAChC,IAAIl4C,EAAI,IAAItP,YAAY,IAExB,IAAK,IAAIqgB,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B/Q,EAAE+Q,GAAKinC,EAAEE,KAAKnnC,EACpB,CAEI,IAAK,IAAIonC,GAAK,GAAIA,GAAK,KAAMA,GAAI,CAC/Bn4C,EAAEm4C,IAAMP,KAAK53C,EAAEm4C,GAAK,GAAKn4C,EAAEm4C,GAAK,GAAKn4C,EAAEm4C,GAAK,IAAMn4C,EAAEm4C,GAAK,IAAK,EACpE,CAEI,IAAI74D,EAAIioB,EAAE,GACV,IAAI3pB,EAAI2pB,EAAE,GACV,IAAI9sB,EAAI8sB,EAAE,GACV,IAAIttB,EAAIstB,EAAE,GACV,IAAI5tB,EAAI4tB,EAAE,GAEV,IAAK,IAAI6wC,IAAM,EAAGA,IAAM,KAAMA,IAAK,CACjC,IAAIl+D,EAAIG,KAAKQ,MAAMu9D,IAAM,IACzB,IAAI1yC,EAAIkyC,KAAKt4D,EAAG,GAAK4W,EAAEhc,EAAG0D,EAAGnD,EAAGR,GAAKN,EAAIm+D,EAAE59D,GAAK8lB,EAAEo4C,OAAS,EAC3Dz+D,EAAIM,EACJA,EAAIQ,EACJA,EAAIm9D,KAAKh6D,EAAG,MAAQ,EACpBA,EAAI0B,EACJA,EAAIomB,CACV,CAEI6B,EAAE,GAAKA,EAAE,GAAKjoB,IAAM,EACpBioB,EAAE,GAAKA,EAAE,GAAK3pB,IAAM,EACpB2pB,EAAE,GAAKA,EAAE,GAAK9sB,IAAM,EACpB8sB,EAAE,GAAKA,EAAE,GAAKttB,IAAM,EACpBstB,EAAE,GAAKA,EAAE,GAAK5tB,IAAM,CACxB,CAEE,MAAO,CAAC4tB,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAMA,EAAE,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAMA,EAAE,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAMA,EAAE,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAMA,EAAE,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAMA,EAAE,GAAK,IAC7V,CC3FA,IAAI8wC,GAAKtC,IAAI,KAAM,GAAM8B,MCFzB,IAAAS,IAAe,uCCEf,SAAS1d,QAAQ2Z,MACf,IAAKtB,SAASsB,MAAO,CACnB,MAAMv3D,UAAU,eACpB,CAEE,OAAOiG,SAASsxD,KAAKrxD,OAAO,GAAI,GAAI,GACtC,8WCNA,MAAMqxD,KAAOt5D,WAAgBy8D,GAe7B,MAAMa,gBAAkB,SAASC,OAAQ3J,OAAQ4J,GAAI1uC,SACnD,UAAUyuC,SAAW,SAAU,CAC7B,MAAM,IAAIx7D,UAAUw7D,OAAS,qBAG/BzuC,QAAUA,SAAW,CAAE,EAGvB,MAAM6wB,eAAiB7wB,QAAQ6wB,UAAY,SAAW7wB,QAAQ6wB,QAAU,EACxE,GAAIA,UAAY,GAAKA,UAAY,EAAG,CAClC,MAAM,IAAI59C,UAAU49C,QAAU,mBAGhC,MAAM8d,QAAU,CACdF,OAAQA,QAGV,GAAG5d,UAAY,EAAG,CAChB8d,QAAQC,QAAU,MAGpB,GAAG9J,OAAQ,CAET,UAAUA,SAAW,WAAav3D,MAAM2H,QAAQ4vD,QAAS,CACvD,MAAM,IAAI7xD,UAAU6xD,OAAS,wCAE/B6J,QAAQ7J,OAASA,OAInB,UAAU,KAAQ,YAAa,CAC7B,MAAM+J,iBAAmB7uC,QAAQ6uC,YAAc,WAAa7uC,QAAQ6uC,UAAY,WAAa,OAAOrE,MAAS,EAC7GmE,QAAQD,GAAKG,UAAUF,QAAS3uC,QACjC,MAAM,GAAI6wB,UAAY,GAAK6d,KAAO,KAAM,CAEvC,GAAI1uC,QAAQ8uC,mBAAoB,CAC9BH,QAAQD,GAAK,KAEnB,KAAS,CACLC,QAAQD,GAAKA,GAGf,OAAOC,OACR,EAEDI,kBAAiBP,gKC5DjB,MAAMhE,KAAOt5D,WAAgBy8D,GAC7B,MAAMa,gBAAkBr9D,yBAcxB,MAAM69D,cAAgB,SAASC,WAAYjvC,SACzC,KAAKvtB,gBAAgBu8D,eAAgB,CACnC,OAAO,IAAIA,cAAcC,WAAYjvC,SAGvC,IAAKA,QAAS,CACZA,QAAU,CAAE,EAGdvtB,KAAKutB,QAAU,CACbkvC,eAAgBlvC,QAAQkvC,UAAY,YAAclvC,QAAQkvC,QAAU,KACpEC,gBAAiBnvC,QAAQmvC,WAAa,YAAcnvC,QAAQmvC,SAAW,KACvEN,iBAAkB7uC,QAAQ6uC,YAAc,YAAc7uC,QAAQ6uC,UAAY,WAAa,OAAOrE,MAAS,EACvG3Z,eAAgB7wB,QAAQ6wB,UAAY,YAAc7wB,QAAQ6wB,QAAU,EACpEie,0BAA2B9uC,QAAQ8uC,qBAAuB,UAAY9uC,QAAQ8uC,mBAAqB,OAGrGr8D,KAAKw8D,WAAaA,UACnB,EAEaG,QAAGJ,cAWjBA,cAAc58D,UAAUu8D,QAAU,SAASF,OAAQ3J,OAAQ4J,GAAIW,UAC7D,MAAMpmC,KAAOx2B,KACb,IAAIk8D,QAAU,KAGd,MAAMW,QAAU/hE,MAAM2H,QAAQu5D,gBAAkB3J,SAAW,WAE3D,GAAIryD,KAAKutB,QAAQ6wB,UAAY,GAAKye,QAAS,CACzC,MAAM,IAAIr8D,UAAU,0CAItB,MAAMs8D,OAASD,SAAWb,eAAiBA,SAAW,iBAAmB3J,SAAW,WAEpF,GAAGwK,SAAWC,MAAO,CACnBF,SAAWvK,OACX6J,QAAUF,MACd,KAAS,CACL,UAAUC,KAAO,WAAY,CAC3BW,SAAWX,GAEXA,GAAKh8D,UAGP,MAAM88D,mBAAqBH,WAAa,WAExC,IACEV,QAAUH,gBAAgBC,OAAQ3J,OAAQ4J,GAAI,CAC5CG,UAAWp8D,KAAKutB,QAAQ6uC,UACxBhe,QAASp+C,KAAKutB,QAAQ6wB,QACtBie,mBAAoBr8D,KAAKutB,QAAQ8uC,oBAEpC,CAAC,MAAMjtB,KACN,GAAG2tB,YAAa,CACd,OAAOH,SAASxtB,KAElB,MAAMA,IAIR,IAAI2tB,YAAa,CACf,OAAOb,SAKX,IAAI7tD,QACJ,IACEA,QAAU41C,KAAKC,UAAUgY,QAASl8D,KAAKutB,QAAQmvC,SAChD,CAAC,MAAMttB,KACN,OAAOwtB,SAASxtB,KAGlBpvC,KAAKw8D,WAAWnuD,SAAS,SAAS+gC,IAAK4tB,UACrCxmC,KAAKymC,eAAe7tB,IAAK4tB,SAAUJ,SACvC,IAGE,OAAOV,OACR,EASDK,cAAc58D,UAAUs9D,eAAiB,SAAS7tB,IAAK8tB,aAAcN,UACnE,GAAGxtB,IAAK,CACNwtB,SAASxtB,KACT,OAGF,IAAI8tB,aAAc,CAGhB,OAAON,WAGT,IAAII,SACJ,IACEA,SAAW/Y,KAAKiV,MAAMgE,aAAcl9D,KAAKutB,QAAQkvC,QAClD,CAAC,MAAMrtB,KACN,OAAOwtB,SAASxtB,KAGlB,GAAGwtB,SAAS1hE,SAAW,EAAG,CAIxB,GAAGJ,MAAM2H,QAAQu6D,UAAW,CAG1B,MAAMG,QAAU,SAAS91D,KACvB,cAAcA,IAAI/H,QAAU,WAC7B,EAED,MAAM89D,WAAa,SAAU/1D,KAC3B,OAAQ81D,QAAQ91D,IACjB,EAED,OAAOu1D,SAAS,KAAMI,SAAS7gB,OAAOghB,SAAUH,SAAS7gB,OAAOihB,YAEtE,KAAW,CAGL,OAAOR,SAAS,KAAMI,SAAS19D,MAAO09D,SAASh/C,SAMnD4+C,SAAS,KAAMI,SAChB,2GClKD,MAAMK,uBAAyB,GAG/B,SAASC,cAAch5D,GACrB,IAAIg5D,cAAgB,EACpB,MAAOh5D,EAAI,EAAG,CACZA,GAAK,EACLg5D,eACF,CACA,OAAOA,aACT,CAGA,SAASC,eAAej5D,GACtB,GAAIA,IAAM,EAAG,OAAO,EACpBA,IACAA,GAAKA,GAAK,EACVA,GAAKA,GAAK,EACVA,GAAKA,GAAK,EACVA,GAAKA,GAAK,EACVA,GAAKA,GAAK,GACVA,GAAKA,GAAK,GACV,OAAOA,EAAI,CACb,CAOO,MAAMk5D,cAYXzvD,YACE0vD,cACAC,yBACAC,OACAC,iBACAC,iBAhBF79D,KACOy9D,mBAAa,EACpBz9D,KACO09D,8BAAwB,EAC/B19D,KACO29D,YAAM,EACb39D,KACO49D,sBAAgB,EACvB59D,KACO69D,qBAAe,EASpB79D,KAAKy9D,cAAgBA,cACrBz9D,KAAK09D,yBAA2BA,yBAChC19D,KAAK29D,OAASA,OACd39D,KAAK49D,iBAAmBA,iBACxB59D,KAAK69D,gBAAkBA,eACzB,CAEAC,SAAS9J,MACP,OAAOh0D,KAAK+9D,qBAAqB/J,MAAM,EACzC,CAEA+J,qBAAqB/J,MACnB,GAAIA,KAAOh0D,KAAK69D,gBAAiB,CAC/B,MAAMG,MACJV,cAAcC,eAAevJ,KAAOqJ,uBAAyB,IAC7DC,cAAcD,wBACd,EAEF,MAAMY,SAAWj+D,KAAKk+D,gBAAgBF,OACtC,MAAMG,UAAYnK,MAAQiK,SAAWZ,wBACrC,MAAO,CAACW,MAAOG,UACjB,KAAO,CACL,MAAMC,gBAAkBpK,KAAOh0D,KAAK69D,gBACpC,MAAMQ,iBAAmBxgE,KAAKQ,MAAM+/D,gBAAkBp+D,KAAKy9D,eAC3D,MAAMO,MAAQh+D,KAAK49D,iBAAmBS,iBACtC,MAAMF,UAAYC,gBAAkBp+D,KAAKy9D,cACzC,MAAO,CAACO,MAAOG,UACjB,CACF,CAEAG,oBAAoBN,OAClB,GAAIA,OAASh+D,KAAK49D,iBAAkB,CAClC,OAAQ//D,KAAKC,IAAI,EAAGkgE,OAAS,GAAKX,sBACpC,KAAO,CACL,OACGW,MAAQh+D,KAAK49D,kBAAoB59D,KAAKy9D,cACvCz9D,KAAK69D,eAET,CACF,CAEAU,mBAAmBP,OACjB,OAAOh+D,KAAKs+D,oBAAoBN,OAASh+D,KAAKk+D,gBAAgBF,OAAS,CACzE,CAEAE,gBAAgBF,OACd,GAAIA,MAAQh+D,KAAK49D,iBAAkB,CACjC,OAAO//D,KAAKC,IAAI,EAAGkgE,MAAQV,cAAcD,wBAC3C,KAAO,CACL,OAAOr9D,KAAKy9D,aACd,CACF,ECjGa3sD,IAAAA,UAAAA,WAAW0tD,wMCD1B,IAAIpf,IAAM3/C,OAAOE,UAAUspC,eACvBlc,OAAS,IASb,SAAS0xC,SAAS,CASlB,GAAIh/D,OAAO2Q,OAAQ,CACjBquD,OAAO9+D,UAAYF,OAAO2Q,OAAO,MAMjC,KAAK,IAAIquD,QAASC,UAAW3xC,OAAS,MAYxC,SAAS4xC,GAAGhvD,GAAIwd,QAASyxC,MACvB5+D,KAAK2P,GAAKA,GACV3P,KAAKmtB,QAAUA,QACfntB,KAAK4+D,KAAOA,MAAQ,MActB,SAASC,YAAYC,QAASC,MAAOpvD,GAAIwd,QAASyxC,MAChD,UAAWjvD,KAAO,WAAY,CAC5B,MAAM,IAAInP,UAAU,mCAGtB,IAAIw+D,SAAW,IAAIL,GAAGhvD,GAAIwd,SAAW2xC,QAASF,MAC1CK,IAAMlyC,OAASA,OAASgyC,MAAQA,MAEpC,IAAKD,QAAQI,QAAQD,KAAMH,QAAQI,QAAQD,KAAOD,SAAUF,QAAQK,oBAC/D,IAAKL,QAAQI,QAAQD,KAAKtvD,GAAImvD,QAAQI,QAAQD,KAAK3iE,KAAK0iE,eACxDF,QAAQI,QAAQD,KAAO,CAACH,QAAQI,QAAQD,KAAMD,UAEnD,OAAOF,QAUT,SAASM,WAAWN,QAASG,KAC3B,KAAMH,QAAQK,eAAiB,EAAGL,QAAQI,QAAU,IAAIT,mBAC5CK,QAAQI,QAAQD,KAU9B,SAASI,eACPr/D,KAAKk/D,QAAU,IAAIT,OACnBz+D,KAAKm/D,aAAe,EAUtBE,aAAa1/D,UAAU2/D,WAAa,SAASA,aAC3C,IAAIC,MAAQ,GACRC,OACArxD,KAEJ,GAAInO,KAAKm/D,eAAiB,EAAG,OAAOI,MAEpC,IAAKpxD,QAASqxD,OAASx/D,KAAKk/D,QAAU,CACpC,GAAI9f,IAAI57C,KAAKg8D,OAAQrxD,MAAOoxD,MAAMjjE,KAAKywB,OAAS5e,KAAKlM,MAAM,GAAKkM,MAGlE,GAAI1O,OAAOggE,sBAAuB,CAChC,OAAOF,MAAMn8D,OAAO3D,OAAOggE,sBAAsBD,SAGnD,OAAOD,KACR,EASDF,aAAa1/D,UAAU+/D,UAAY,SAASA,UAAUX,OACpD,IAAIE,IAAMlyC,OAASA,OAASgyC,MAAQA,MAChCY,SAAW3/D,KAAKk/D,QAAQD,KAE5B,IAAKU,SAAU,MAAO,GACtB,GAAIA,SAAShwD,GAAI,MAAO,CAACgwD,SAAShwD,IAElC,IAAK,IAAI3U,EAAI,EAAG6X,EAAI8sD,SAASzkE,OAAQ0kE,GAAK,IAAI9kE,MAAM+X,GAAI7X,EAAI6X,EAAG7X,IAAK,CAClE4kE,GAAG5kE,GAAK2kE,SAAS3kE,GAAG2U,GAGtB,OAAOiwD,EACR,EASDP,aAAa1/D,UAAUkgE,cAAgB,SAASA,cAAcd,OAC5D,IAAIE,IAAMlyC,OAASA,OAASgyC,MAAQA,MAChCW,UAAY1/D,KAAKk/D,QAAQD,KAE7B,IAAKS,UAAW,OAAO,EACvB,GAAIA,UAAU/vD,GAAI,OAAO,EACzB,OAAO+vD,UAAUxkE,MAClB,EASDmkE,aAAa1/D,UAAUmgE,KAAO,SAASA,KAAKf,MAAO7nC,GAAIG,GAAIG,GAAIG,GAAIG,IACjE,IAAImnC,IAAMlyC,OAASA,OAASgyC,MAAQA,MAEpC,IAAK/+D,KAAKk/D,QAAQD,KAAM,OAAO,MAE/B,IAAIS,UAAY1/D,KAAKk/D,QAAQD,KACzBhkE,IAAMyI,UAAUxI,OAChBuiB,KACAziB,EAEJ,GAAI0kE,UAAU/vD,GAAI,CAChB,GAAI+vD,UAAUd,KAAM5+D,KAAK+/D,eAAehB,MAAOW,UAAU/vD,GAAI1P,UAAW,MAExE,OAAQhF,KACN,KAAK,EAAG,OAAOykE,UAAU/vD,GAAGnM,KAAKk8D,UAAUvyC,SAAU,KACrD,KAAK,EAAG,OAAOuyC,UAAU/vD,GAAGnM,KAAKk8D,UAAUvyC,QAAS+J,IAAK,KACzD,KAAK,EAAG,OAAOwoC,UAAU/vD,GAAGnM,KAAKk8D,UAAUvyC,QAAS+J,GAAIG,IAAK,KAC7D,KAAK,EAAG,OAAOqoC,UAAU/vD,GAAGnM,KAAKk8D,UAAUvyC,QAAS+J,GAAIG,GAAIG,IAAK,KACjE,KAAK,EAAG,OAAOkoC,UAAU/vD,GAAGnM,KAAKk8D,UAAUvyC,QAAS+J,GAAIG,GAAIG,GAAIG,IAAK,KACrE,KAAK,EAAG,OAAO+nC,UAAU/vD,GAAGnM,KAAKk8D,UAAUvyC,QAAS+J,GAAIG,GAAIG,GAAIG,GAAIG,IAAK,KAG3E,IAAK98B,EAAI,EAAGyiB,KAAO,IAAI3iB,MAAMG,IAAK,GAAID,EAAIC,IAAKD,IAAK,CAClDyiB,KAAKziB,EAAI,GAAK0I,UAAU1I,GAG1B0kE,UAAU/vD,GAAGjL,MAAMg7D,UAAUvyC,QAAS1P,KAC1C,KAAS,CACL,IAAIviB,OAASwkE,UAAUxkE,OACnBgL,EAEJ,IAAKlL,EAAI,EAAGA,EAAIE,OAAQF,IAAK,CAC3B,GAAI0kE,UAAU1kE,GAAG4jE,KAAM5+D,KAAK+/D,eAAehB,MAAOW,UAAU1kE,GAAG2U,GAAI1P,UAAW,MAE9E,OAAQhF,KACN,KAAK,EAAGykE,UAAU1kE,GAAG2U,GAAGnM,KAAKk8D,UAAU1kE,GAAGmyB,SAAU,MACpD,KAAK,EAAGuyC,UAAU1kE,GAAG2U,GAAGnM,KAAKk8D,UAAU1kE,GAAGmyB,QAAS+J,IAAK,MACxD,KAAK,EAAGwoC,UAAU1kE,GAAG2U,GAAGnM,KAAKk8D,UAAU1kE,GAAGmyB,QAAS+J,GAAIG,IAAK,MAC5D,KAAK,EAAGqoC,UAAU1kE,GAAG2U,GAAGnM,KAAKk8D,UAAU1kE,GAAGmyB,QAAS+J,GAAIG,GAAIG,IAAK,MAChE,QACE,IAAK/Z,KAAM,IAAKvX,EAAI,EAAGuX,KAAO,IAAI3iB,MAAMG,IAAK,GAAIiL,EAAIjL,IAAKiL,IAAK,CAC7DuX,KAAKvX,EAAI,GAAKxC,UAAUwC,GAG1Bw5D,UAAU1kE,GAAG2U,GAAGjL,MAAMg7D,UAAU1kE,GAAGmyB,QAAS1P,QAKpD,OAAO,IACR,EAWD4hD,aAAa1/D,UAAUqgE,GAAK,SAASA,GAAGjB,MAAOpvD,GAAIwd,SACjD,OAAO0xC,YAAY7+D,KAAM++D,MAAOpvD,GAAIwd,QAAS,MAC9C,EAWDkyC,aAAa1/D,UAAUi/D,KAAO,SAASA,KAAKG,MAAOpvD,GAAIwd,SACrD,OAAO0xC,YAAY7+D,KAAM++D,MAAOpvD,GAAIwd,QAAS,KAC9C,EAYDkyC,aAAa1/D,UAAUogE,eAAiB,SAASA,eAAehB,MAAOpvD,GAAIwd,QAASyxC,MAClF,IAAIK,IAAMlyC,OAASA,OAASgyC,MAAQA,MAEpC,IAAK/+D,KAAKk/D,QAAQD,KAAM,OAAOj/D,KAC/B,IAAK2P,GAAI,CACPyvD,WAAWp/D,KAAMi/D,KACjB,OAAOj/D,KAGT,IAAI0/D,UAAY1/D,KAAKk/D,QAAQD,KAE7B,GAAIS,UAAU/vD,GAAI,CAChB,GACE+vD,UAAU/vD,KAAOA,MACfivD,MAAQc,UAAUd,SAClBzxC,SAAWuyC,UAAUvyC,UAAYA,SACnC,CACAiyC,WAAWp/D,KAAMi/D,KAEvB,KAAS,CACL,IAAK,IAAIjkE,EAAI,EAAGwkE,OAAS,GAAItkE,OAASwkE,UAAUxkE,OAAQF,EAAIE,OAAQF,IAAK,CACvE,GACE0kE,UAAU1kE,GAAG2U,KAAOA,IACnBivD,OAASc,UAAU1kE,GAAG4jE,MACtBzxC,SAAWuyC,UAAU1kE,GAAGmyB,UAAYA,QACrC,CACAqyC,OAAOljE,KAAKojE,UAAU1kE,KAO1B,GAAIwkE,OAAOtkE,OAAQ8E,KAAKk/D,QAAQD,KAAOO,OAAOtkE,SAAW,EAAIskE,OAAO,GAAKA,YACpEJ,WAAWp/D,KAAMi/D,KAGxB,OAAOj/D,IACR,EASDq/D,aAAa1/D,UAAUsgE,mBAAqB,SAASA,mBAAmBlB,OACtE,IAAIE,IAEJ,GAAIF,MAAO,CACTE,IAAMlyC,OAASA,OAASgyC,MAAQA,MAChC,GAAI/+D,KAAKk/D,QAAQD,KAAMG,WAAWp/D,KAAMi/D,IAC5C,KAAS,CACLj/D,KAAKk/D,QAAU,IAAIT,OACnBz+D,KAAKm/D,aAAe,EAGtB,OAAOn/D,IACR,EAKDq/D,aAAa1/D,UAAUmyB,IAAMutC,aAAa1/D,UAAUogE,eACpDV,aAAa1/D,UAAUk/D,YAAcQ,aAAa1/D,UAAUqgE,GAK5DX,aAAaa,SAAWnzC,OAKxBsyC,aAAaA,aAAeA,aAKO,CACjC9uC,OAAA1xB,QAAiBwgE,YACnB,+JC3UA,IAAIc,qBAAuB,cAAcd,aACvCe,OAQAryD,YAAYmhC,QAAS3hB,QAAS8yC,WAC5BryD,QACAhO,KAAKogE,OAAS,IAAIx7C,OAAO07C,UAAUpxB,QAASmxB,WAC5CrgE,KAAKogE,OAAOG,OAAS,IAAMvgE,KAAK8/D,KAAK,QACrC9/D,KAAKogE,OAAOI,UAAazB,OAAU/+D,KAAK8/D,KAAK,UAAWf,MAAMr8D,MAC9D1C,KAAKogE,OAAOK,QAAWnhE,OAAUU,KAAK8/D,KAAK,QAASxgE,OACpDU,KAAKogE,OAAOM,QAAW3B,QACrB/+D,KAAK8/D,KAAK,QAASf,MAAMhkE,KAAMgkE,MAAM4B,OAAO,CAElD,CASEC,KAAKl+D,KAAMm+D,kBAAmBjE,UAC5B,MAAMkE,GAAKlE,UAAYiE,kBACvB,IACE7gE,KAAKogE,OAAOQ,KAAKl+D,MACjBo+D,IACD,CAAC,MAAOxhE,OACPwhE,GAAGxhE,MACT,CACA,CASEyhE,MAAMhmE,KAAM4lE,QACV3gE,KAAKogE,OAAOW,MAAMhmE,KAAM4lE,OAC5B,CACEK,iBAAiBx+D,KAAMw8D,SAAUzxC,SAC/BvtB,KAAKogE,OAAOY,iBAAiBx+D,KAAMw8D,SAAUzxC,QACjD,GAEA,SAAS+yC,UAAUpxB,QAAS3hB,SAC1B,OAAO,IAAI4yC,qBAAqBjxB,QAAS3hB,QAC3C,CAGA,IAAI0zC,gBAAkB,MACpB5vD,OAAOrT,OACL,OAAOimD,KAAKC,UAAUlmD,MAC1B,CACE2mC,OAAO3mC,OACL,OAAOimD,KAAKiV,MAAMl7D,MACtB,GAIA,IAAIkjE,aAAe,cAAc7B,aAC/BnwB,QACAiyB,OACAC,MACA7zC,QACA8zC,YACAC,MACAC,UACAC,mBACAC,mBACAC,eACAC,aACAC,mBACAC,oBACAzB,OACA0B,iBACAC,SAWAh0D,YAAY+zD,iBAAkB5yB,QAAU,uBAAuBmyB,YAC7DA,YAAc,KAAIE,UAClBA,UAAY,KAAIE,mBAChBA,mBAAqB,IAAGC,eACxBA,eAAiB,KACdC,cACD,CAAE,EAAEE,oBAAqBE,UAC3B/zD,QACAhO,KAAK8hE,iBAAmBA,iBACxB9hE,KAAKohE,MAAQ,CAAE,EACfphE,KAAKmhE,OAAS,EACdnhE,KAAKkvC,QAAUA,QACflvC,KAAKqhE,YAAcA,YACnBrhE,KAAKshE,MAAQ,MACbthE,KAAKuhE,UAAYA,UACjBvhE,KAAKwhE,wBAA0B,EAC/BxhE,KAAKyhE,mBAAqBA,mBAC1BzhE,KAAK0hE,eAAiBA,eACtB1hE,KAAK2hE,aAAeA,aACpB3hE,KAAK4hE,mBAAqB,EAC1B5hE,KAAK6hE,oBAAsBA,qBAAwB,OAAQ7hE,KAAKmhE,QAChE,IAAKY,SAAU/hE,KAAK+hE,SAAW,IAAId,qBAC9BjhE,KAAK+hE,SAAWA,SACrB,GAAI/hE,KAAKqhE,YACPrhE,KAAKgiE,SAAShiE,KAAKkvC,QAAS,CAC1BmyB,YAAarhE,KAAKqhE,YAClBE,UAAWvhE,KAAKuhE,UAChBE,mBAAoBzhE,KAAKyhE,mBACzBC,eAAgB1hE,KAAK0hE,kBAClB1hE,KAAK2hE,cAEhB,CAMEM,UACE,GAAIjiE,KAAKogE,OAAQ,OACjBpgE,KAAKgiE,SAAShiE,KAAKkvC,QAAS,CAC1BmyB,YAAarhE,KAAKqhE,YAClBE,UAAWvhE,KAAKuhE,UAChBE,mBAAoBzhE,KAAKyhE,mBACzBC,eAAgB1hE,KAAK0hE,kBAClB1hE,KAAK2hE,cAEd,CAUEn+D,KAAKw4D,OAAQ3J,OAAQ6P,QAASC,SAC5B,IAAKA,SAAW,kBAAoBD,QAAS,CAC3CC,QAAUD,QACVA,QAAU,IAChB,CACI,OAAO,IAAItY,SAAQ,CAACC,QAASC,UAC3B,IAAK9pD,KAAKshE,MAAO,OAAOxX,OAAO,IAAIxuD,MAAM,qBACzC,MAAM6lE,OAASnhE,KAAK6hE,oBAAoB7F,OAAQ3J,QAChD,MAAMhkD,QAAU,CACd8tD,QAAS,MACTH,cACA3J,OAAQA,aAAe,EACvB4J,GAAIkF,QAENnhE,KAAKogE,OAAOQ,KAAK5gE,KAAK+hE,SAAS1wD,OAAOhD,SAAU8zD,SAAU7iE,QACxD,GAAIA,MAAO,OAAOwqD,OAAOxqD,OACzBU,KAAKohE,MAAMD,QAAU,CAAEiB,QAAS,CAACvY,QAASC,SAC1C,GAAIoY,QAAS,CACXliE,KAAKohE,MAAMD,QAAQe,QAAU7V,YAAW,YAC/BrsD,KAAKohE,MAAMD,QAClBrX,OAAO,IAAIxuD,MAAM,iBAAiB,GACjC4mE,QACb,IACQ,GAER,CAOExc,YAAY2M,QACV,MAAMgQ,WAAariE,KAAKwD,KAAK,YAAa6uD,QAC1C,IAAKgQ,KAAM,MAAM,IAAI/mE,MAAM,yBAC3B,OAAO+mE,IACX,CAME3c,oBACE,aAAa1lD,KAAKwD,KAAK,gBAC3B,CAQE8+D,OAAOtG,OAAQ3J,QACb,OAAO,IAAIzI,SAAQ,CAACC,QAASC,UAC3B,IAAK9pD,KAAKshE,MAAO,OAAOxX,OAAO,IAAIxuD,MAAM,qBACzC,MAAM+S,QAAU,CACd8tD,QAAS,MACTH,cACA3J,eAEFryD,KAAKogE,OAAOQ,KAAK5gE,KAAK+hE,SAAS1wD,OAAOhD,UAAW/O,QAC/C,GAAIA,MAAO,OAAOwqD,OAAOxqD,OACzBuqD,SAAS,GACT,GAER,CAQEnE,gBAAgBqZ,OACd,UAAWA,QAAU,SAAUA,MAAQ,CAACA,OACxC,MAAM/gD,aAAehe,KAAKwD,KAAK,SAAUu7D,OACzC,UAAWA,QAAU,UAAY/gD,OAAO+gD,SAAW,KACjD,MAAM,IAAIzjE,MACR,mCAAqCyjE,MAAQ,WAAa/gD,OAAO+gD,QAErE,OAAO/gD,MACX,CAQE0nC,kBAAkBqZ,OAChB,UAAWA,QAAU,SAAUA,MAAQ,CAACA,OACxC,MAAM/gD,aAAehe,KAAKwD,KAAK,UAAWu7D,OAC1C,UAAWA,QAAU,UAAY/gD,OAAO+gD,SAAW,KACjD,MAAM,IAAIzjE,MAAM,4CAA8C0iB,QAChE,OAAOA,MACX,CAQE+iD,MAAMhmE,KAAM2H,MACV1C,KAAKogE,OAAOW,MAAMhmE,MAAQ,IAAK2H,KACnC,CAOE6/D,iBAAiBhB,WACfvhE,KAAKuhE,UAAYA,SACrB,CAOEiB,qBAAqBC,UACnBziE,KAAKyhE,mBAAqBgB,QAC9B,CAOEC,iBAAiBhB,gBACf1hE,KAAK0hE,eAAiBA,cAC1B,CASEM,SAAS9yB,QAAS3hB,SAChBo1C,aAAa3iE,KAAKwhE,oBAClBxhE,KAAKogE,OAASpgE,KAAK8hE,iBAAiB5yB,QAAS3hB,SAC7CvtB,KAAKogE,OAAOY,iBAAiB,QAAQ,KACnChhE,KAAKshE,MAAQ,KACbthE,KAAK8/D,KAAK,QACV9/D,KAAK4hE,mBAAqB,CAAC,IAE7B5hE,KAAKogE,OAAOY,iBAAiB,WAAW,EAAGt+D,KAAM2L,YAC/C,GAAIA,mBAAmBxN,YACrBwN,QAAUvP,cAAAA,OAAO4B,KAAK2N,SAAS1L,WACjC,IACE0L,QAAUrO,KAAK+hE,SAASp9B,OAAOt2B,QAChC,CAAC,MAAO/O,OACP,MACR,CACM,GAAI+O,QAAQu0D,cAAgB5iE,KAAK0/D,UAAUrxD,QAAQu0D,cAAc1nE,OAAQ,CACvE,IAAKuE,OAAOwuC,KAAK5/B,QAAQgkD,QAAQn3D,OAC/B,OAAO8E,KAAK8/D,KAAKzxD,QAAQu0D,cAC3B,MAAMnlD,KAAO,CAACpP,QAAQu0D,cACtB,GAAIv0D,QAAQgkD,OAAOtkD,cAAgBtO,OAAQge,KAAKnhB,KAAK+R,QAAQgkD,aAE3D,IAAK,IAAIr3D,EAAI,EAAGA,EAAIqT,QAAQgkD,OAAOn3D,OAAQF,IACzCyiB,KAAKnhB,KAAK+R,QAAQgkD,OAAOr3D,IAC7B,OAAO4uD,QAAQC,UAAUG,MAAK,KAC5BhqD,KAAK8/D,KAAKp7D,MAAM1E,KAAMyd,KAAK,GAErC,CACM,IAAKzd,KAAKohE,MAAM/yD,QAAQ4tD,IAAK,CAC3B,GAAI5tD,QAAQ2tD,OAAQ,CAClB,OAAOpS,QAAQC,UAAUG,MAAK,KAC5BhqD,KAAK8/D,KAAKzxD,QAAQ2tD,OAAQ3tD,SAASgkD,OAAO,GAEtD,CACQ,MACR,CACM,GAAI,UAAWhkD,UAAY,WAAYA,QACrCrO,KAAKohE,MAAM/yD,QAAQ4tD,IAAImG,QAAQ,GAC7B,IAAI9mE,MACF,+FAGN,GAAI0E,KAAKohE,MAAM/yD,QAAQ4tD,IAAIiG,QACzBS,aAAa3iE,KAAKohE,MAAM/yD,QAAQ4tD,IAAIiG,SACtC,GAAI7zD,QAAQ/O,MAAOU,KAAKohE,MAAM/yD,QAAQ4tD,IAAImG,QAAQ,GAAG/zD,QAAQ/O,YACxDU,KAAKohE,MAAM/yD,QAAQ4tD,IAAImG,QAAQ,GAAG/zD,QAAQ2P,eACxChe,KAAKohE,MAAM/yD,QAAQ4tD,GAAG,IAE/Bj8D,KAAKogE,OAAOY,iBAAiB,SAAU1hE,OAAUU,KAAK8/D,KAAK,QAASxgE,SACpEU,KAAKogE,OAAOY,iBAAiB,SAAS,EAAGjmE,UAAM4lE,kBAC7C,GAAI3gE,KAAKshE,MACPjV,YAAW,IAAMrsD,KAAK8/D,KAAK,QAAS/kE,KAAM4lE,SAAS,GACrD3gE,KAAKshE,MAAQ,MACbthE,KAAKogE,YAAc,EACnB,GAAIrlE,OAAS,IAAK,OAClBiF,KAAK4hE,qBACL,GAAI5hE,KAAKuhE,YAAcvhE,KAAK0hE,eAAiB1hE,KAAK4hE,oBAAsB5hE,KAAK0hE,iBAAmB,GAC9F1hE,KAAKwhE,mBAAqBnV,YACxB,IAAMrsD,KAAKgiE,SAAS9yB,QAAS3hB,UAC7BvtB,KAAKyhE,mBACN,GAET,GCvVe,MAAMoB,2BAA2B3B,aAE9CnzD,YACEmhC,QACA3hB,QACAs0C,qBAKA,MAAMC,iBAAoBgB,MACxB,MAAMC,IAAMC,UAAUF,IAAK,CACzBzB,YAAa,KACbK,eAAgB,EAChBH,UAAW,KACXE,mBAAoB,OACjBl0C,UAEL,GAAI,WAAYw1C,IAAK,CACnB/iE,KAAKijE,iBAAmBF,IAAI3C,MAC9B,KAAO,CACLpgE,KAAKijE,iBAAmBF,GAC1B,CACA,OAAOA,GAAG,EAEZ/0D,MAAM8zD,iBAAkB5yB,QAAS3hB,QAASs0C,qBAAqB7hE,KAxBzDijE,sBAAgB,CAyBxB,CACAz/D,QACKia,MAEH,MAAMylD,WAAaljE,KAAKijE,kBAAkBC,WAC1C,GAAIA,aAAe,EAAwB,CACzC,OAAOl1D,MAAMxK,QAAQia,KACvB,CACA,OAAOmsC,QAAQE,OACb,IAAIxuD,MACF,oCACEmiB,KAAK,GACL,qEACAylD,WACA,KAGR,CACAZ,UACK7kD,MAEH,MAAMylD,WAAaljE,KAAKijE,kBAAkBC,WAC1C,GAAIA,aAAe,EAAwB,CACzC,OAAOl1D,MAAMs0D,UAAU7kD,KACzB,CACA,OAAOmsC,QAAQE,OACb,IAAIxuD,MACF,0CACEmiB,KAAK,GACL,qEACAylD,WACA,KAGR,ECrDK,SAASzW,WACdjqD,KACAE,MAEA,IAAI8rC,QACJ,IACEA,QAAUhsC,KAAKwxC,OAAOrP,OAAOjiC,KAC9B,CAAC,MAAO0sC,KACP,MAAM,IAAI9zC,MAAM,wBAA0B8zC,IAC5C,CAEA,GAAIZ,QAAQkiB,YAAcluD,KAAKyvB,MAAO,CACpC,MAAM,IAAI32B,MACR,+CAA+CkzC,QAAQkiB,gBAAgBluD,KAAKyvB,QAEhF,CAEA,OAAOuc,OACT,CChBA,MAAM20B,uBAAyB,GAExB,MAAMC,0BAIXr1D,YAAY0P,MAAqCzd,KAHjDgjB,SAAG,EAAAhjB,KACH0T,WAAK,EAGH1T,KAAKgjB,IAAMvF,KAAKuF,IAChBhjB,KAAK0T,MAAQ+J,KAAK/J,KACpB,CAEA2vD,WACE,MAAMC,QAAUt5D,OAAO,sBACvB,OAAOhK,KAAK0T,MAAM6vD,mBAAqBD,OACzC,CAEAz5C,mBAAmB25C,aACjB,MAAMrpB,KAAOsS,WAAWgX,sBAAuBD,aAE/C,MAAME,uBAAyBF,YAAYtoE,OAASioE,uBACpD3yC,SAAOkzC,wBAA0B,EAAG,2BACpClzC,SAAOkzC,uBAAyB,KAAO,EAAG,2BAE1C,MAAMC,uBAAyBD,uBAAyB,GACxD,MAAMzmB,UAACA,WAAa7C,cAAmB5H,OAAiC,CACtE4H,cAAAA,IAAiBpI,YAAoB2xB,uBAAwB,eAC5Dh/B,OAAO6+B,YAAYvhE,MAAMkhE,yBAE5B,MAAO,CACLI,iBAAkBppB,KAAKopB,iBACvBK,iBAAkBzpB,KAAKypB,iBACvBC,2BAA4B1pB,KAAK2pB,uBACjCC,UACE5pB,KAAK4pB,UAAU7oE,SAAW,EACtB,IAAIqzC,UAAU4L,KAAK4pB,UAAU,IAC7B9jE,UACNg9C,UAAWA,UAAU3mC,KAAI44B,SAAW,IAAIX,UAAUW,WAEtD,EAGF,MAAMu0B,sBAAwB,CAC5BxxC,MAAO,EACP+hB,OAAQoG,cAAAA,OAML,CACDA,cAAgBtV,IAAC,aACjB3uB,IAAI,oBACJikC,cAAAA,KAAkB,oBAClBA,cAAenC,GAAC,0BAChBmC,cAAAA,KACAA,kBACEpI,YACAoI,qBAAoBA,cAAAA,MAAoB,GACxC,gBChFN,MAAM4pB,OAAS,6CAER,SAASC,iBAAiBC,UAC/B,MAAMC,QAAUD,SAASE,MAAMJ,QAC/B,GAAIG,SAAW,KAAM,CACnB,MAAM3jE,UAAU,qCAAqC0jE,aACvD,CACA,MACEnrD,EACAsrD,QACAC,cACAlP,MACE+O,QACJ,MAAMI,SAAWL,SAASM,WAAW,UAAY,OAAS,MAC1D,MAAMC,UACJH,eAAiB,KAAO,KAAO79D,SAAS69D,cAAcriE,MAAM,GAAI,IAClE,MAAMyiE,cAOJD,WAAa,KAAO,GAAK,IAAIA,UAAY,IAC3C,MAAO,GAAGF,aAAaF,UAAUK,gBAAgBtP,MACnD,CCoCA,MAAMuP,oBAAsBzO,OAC1B1lD,SAAS+9B,WACTzsC,UACA9D,OAAS,IAAIuwC,UAAUvwC,SAGzB,MAAM4mE,qBAAuBjO,MAAM,CAAC70D,SAAUi1D,QAAQ,YAEtD,MAAM8N,yBAA2B3O,OAC/B1lD,SAAS1R,cAAMA,QACf8lE,sBACA5mE,OAASc,cAAMA,OAAC4B,KAAK1C,MAAM,GAAI,YAOpB8mE,MAAAA,2BAA6B,GAAK,IAwR/C,SAASC,kBAAkBC,aACzB,GAAI,WAAWhN,KAAKgN,eAAiB,MAAO,CAC1C,MAAM,IAAIxkE,UAAU,oDACtB,CACA,OAAOwkE,WACT,CAGA,SAASC,4BACPC,oBAEA,IAAIvZ,WACJ,IAAI9E,OACJ,UAAWqe,qBAAuB,SAAU,CAC1CvZ,WAAauZ,kBACd,MAAM,GAAIA,mBAAoB,CAC7B,MAAOvZ,WAAYwZ,uBAAwBC,iBACzCF,mBACFvZ,WAAawZ,oBACbte,OAASue,eACX,CACA,MAAO,CAACzZ,sBAAY9E,cACtB,CAKA,SAASwe,oCACPC,SAEA,OAAOA,QAAQhvD,KAAI6lC,QACjB,WAAYA,OACR,IACKA,OACHopB,OAAQ,IACHppB,OAAOopB,OACV5jE,SAAUw6C,OAAOopB,OAAO5jE,UAAY,WAGxCw6C,QAER,CAKA,SAASqpB,gBAAsBxnD,QAC7B,OAAOu0B,MAAM,CACXkzB,KAAK,CACHtJ,QAASpF,QAAQ,OACjBkF,GAAIn6D,SACJkc,gBAEFynD,KAAK,CACHtJ,QAASpF,QAAQ,OACjBkF,GAAIn6D,SACJxC,MAAOmmE,KAAK,CACV1qE,KAAM28D,UACNrpD,QAASvM,SACTY,KAAMy0D,SAASN,YAIvB,CAEA,MAAM6O,iBAAmBF,gBAAgB9N,WAKzC,SAASiO,cAAoBr5B,QAC3B,OAAO4pB,OAAOsP,gBAAgBl5B,QAASo5B,kBAAkB1nE,QACvD,GAAI,UAAWA,MAAO,CACpB,OAAOA,KACT,KAAO,CACL,MAAO,IACFA,MACHggB,OAAQ5N,OAAOpS,MAAMggB,OAAQsuB,QAEjC,IAEJ,CAKA,SAASs5B,wBAA8B5nE,OACrC,OAAO2nE,cACLF,KAAK,CACHt4C,QAASs4C,KAAK,CACZzR,KAAM31C,WAERrgB,cAGN,CAKA,SAAS6nE,6BAAmC7nE,OAC1C,OAAOynE,KAAK,CACVt4C,QAASs4C,KAAK,CACZzR,KAAM31C,WAERrgB,aAEJ,CAKA,SAAS8nE,6BACP1nB,QACA4e,UAEA,GAAI5e,UAAY,EAAG,CACjB,OAAO,IAAIoC,UAAU,CACnBjE,OAAQygB,SAASzgB,OACjBnD,kBAAmB4jB,SAAShf,YAAY1nC,KACtC8mC,YAAc,IAAI7O,UAAU6O,cAE9Ba,gBAAiB+e,SAAS/e,gBAC1BI,qBAAsB2e,SAASrjB,aAAarjC,KAAIwlC,KAAO,CACrD7B,eAAgB6B,GAAG7B,eACnBC,kBAAmB4B,GAAGwC,SACtB57C,KAAMmiC,KAAKF,OAAOmX,GAAGp5C,UAEvB67C,oBAAqBye,SAASze,qBAElC,KAAO,CACL,OAAO,IAAIR,QAAQif,SACrB,CACF,CA8RA,MAAM+I,2BAA6BN,KAAK,CACtCO,WAAY3nD,SACZ4nD,eAAgB5nD,SAChBgC,QAAShC,SACT6nD,MAAO7nD,SACP8nD,SAAU9nD,WAsBZ,MAAM+nD,yBAA2BT,cAC/BxjE,MACE+0D,SACEuO,KAAK,CACHzH,MAAO3/C,SACPgoD,cAAehoD,SACfioD,OAAQjoD,SACRkoD,YAAaloD,SACbmoD,WAAYrP,SAASD,SAAS74C,gBA2BtC,MAAMooD,kCAAoCtkE,MACxCsjE,KAAK,CACHzR,KAAM31C,SACNqoD,kBAAmBroD,YAkBvB,MAAMsoD,uBAAyBlB,KAAK,CAClCjzC,MAAOnU,SACP+3C,UAAW/3C,SACX2nD,WAAY3nD,SACZ2/C,MAAO3/C,WAeT,MAAMuoD,mBAAqBnB,KAAK,CAC9BzH,MAAO3/C,SACP8/C,UAAW9/C,SACXwoD,aAAcxoD,SACdyoD,aAAczoD,SACd0oD,YAAa5P,SAAS94C,UACtB2oD,iBAAkB7P,SAAS94C,YAG7B,MAAM4oD,uBAAyBxB,KAAK,CAClChI,cAAep/C,SACfq/C,yBAA0Br/C,SAC1Bs/C,OAAQphD,UACRqhD,iBAAkBv/C,SAClBw/C,gBAAiBx/C,WAWnB,MAAM6oD,wBAA0B9P,OAAOt1D,SAAUK,MAAMkc,WAKvD,MAAM8oD,uBAAyBjQ,SAAS3kB,MAAM,CAACkzB,KAAK,CAAA,GAAK3jE,YAKzD,MAAMslE,sBAAwB3B,KAAK,CACjCr2B,IAAK+3B,yBAMP,MAAME,wBAA0BtQ,QAAQ,qBAWxC,MAAMuQ,cAAgB7B,KAAK,CACzB,cAAe3jE,SACf,cAAeq1D,SAAS94C,YAkD1B,MAAMkpD,wBAA0B9B,KAAK,CACnC3S,QAAShxD,SACT+sC,UAAW81B,oBACXn+D,OAAQkxD,YAGV,MAAM8P,kCAAoC/B,KAAK,CAC7C52B,UAAW81B,oBACXrmB,SAAUn8C,MAAMwiE,qBAChBjiE,KAAMZ,WAGR,MAAM2lE,mCAAqC7B,wBACzCH,KAAK,CACHr2B,IAAK8nB,SAAS3kB,MAAM,CAACkzB,KAAK,CAAA,GAAK3jE,YAC/BwnD,KAAM4N,SAAS/0D,MAAML,WACrBw8C,SAAU6Y,SACRD,SACE/0D,MACE+0D,SACEuO,KAAK,CACHtS,WAAY52C,UACZ62C,MAAOtxD,SACPgvD,SAAUzyC,SACV3b,KAAMP,MAAML,UACZ4lE,UAAWvQ,SAAS94C,gBAM9BspD,cAAexQ,SAAS94C,UACxBupD,WAAYzQ,SACVD,SACEuO,KAAK,CACH52B,UAAW/sC,SACXY,KAAMi0D,MAAM,CAAC70D,SAAUi1D,QAAQ,gBAIrC8Q,kBAAmB1Q,SACjBD,SACE/0D,MACEsjE,KAAK,CACHxzC,MAAO5T,SACPs7B,aAAcx3C,MACZowC,MAAM,CACJg1B,wBACAC,6CA4gBhB,MAAMM,8BAAgClC,wBACpCH,KAAK,CACHsC,WAAY3Q,OAAOt1D,SAAUK,MAAMkc,WACnC/P,MAAOm3D,KAAK,CACVuC,UAAW3pD,SACX4pD,SAAU5pD,cAmBhB,SAAS6pD,gBACPpF,IACAqF,YACAC,YACAC,gBACAC,wBACAC,WAEA,MAAM/J,MAAQ4J,YAAcA,YAAcI,UAC1C,IAAIC,MACqB,CACvB,GAAIF,WAAa,KAAM,CACrBlpE,QAAQ8kD,KACN,0FACE,sEAEN,CACF,CAuCA,IAAIukB,oBAEJ,GAAIL,gBAAiB,CACnBK,oBAAsBhjB,MAAOijB,KAAMp3C,QACjC,MAAMq3C,wBAA0B,IAAIhf,SAClC,CAACC,QAASC,UACR,IACEue,gBAAgBM,KAAMp3C,MAAM,CAACs3C,aAAcC,eACzCjf,QAAQ,CAACgf,aAAcC,gBAE1B,CAAC,MAAOxpE,OACPwqD,OAAOxqD,MACT,KAGJ,aAAak/D,SAASoK,kBAAkB,CAE5C,CAEA,MAAMG,cAAgB,IAAIC,WAAUtjB,MAAOwW,QAASU,YAClD,MAAMrvC,QAAU,CACdyuC,OAAQ,OACRiN,KAAM/M,QACNuM,YACAS,QAASzpE,OAAOouC,OACd,CACE,eAAgB,oBAElBs6B,aAAe,CAAA,EACfgB,sBAIJ,IACE,IAAIC,0BAA4B,EAChC,IAAI/hE,IACJ,IAAIgiE,SAAW,IACf,OAAS,CACP,GAAIX,oBAAqB,CACvBrhE,UAAYqhE,oBAAoB5F,IAAKv1C,QACvC,KAAO,CACLlmB,UAAYm3D,MAAMsE,IAAKv1C,QACzB,CAEA,GAAIlmB,IAAIykD,SAAW,IAA6B,CAC9C,KACF,CACA,GAAIwc,0BAA4B,KAAM,CACpC,KACF,CACAc,2BAA6B,EAC7B,GAAIA,4BAA8B,EAAG,CACnC,KACF,CACA/pE,QAAQC,MACN,yBAAyB+H,IAAIykD,UAAUzkD,IAAIiiE,+BAA+BD,6BAEtEld,MAAMkd,UACZA,UAAY,CACd,CAEA,MAAME,WAAaliE,IAAIkiE,OACvB,GAAIliE,IAAImiE,GAAI,CACV5M,SAAS,KAAM2M,KACjB,KAAO,CACL3M,SAAS,IAAIthE,MAAM,GAAG+L,IAAIykD,UAAUzkD,IAAIiiE,eAAeC,QACzD,CACD,CAAC,MAAOn6B,KACP,GAAIA,eAAe9zC,MAAOshE,SAASxtB,IACrC,IACC,IAEH,OAAO25B,aACT,CAEA,SAASU,iBAAiBC,QACxB,MAAO,CAAC1N,OAAQv+C,OACP,IAAImsC,SAAQ,CAACC,QAASC,UAC3B4f,OAAOxN,QAAQF,OAAQv+C,MAAM,CAAC2xB,IAAU4tB,YACtC,GAAI5tB,IAAK,CACP0a,OAAO1a,KACP,MACF,CACAya,QAAQmT,SAAS,GACjB,GAGR,CAEA,SAAS2M,sBAAsBD,QAC7B,OAAQE,UACC,IAAIhgB,SAAQ,CAACC,QAASC,UAE3B,GAAI8f,SAAS1uE,SAAW,EAAG2uD,QAAQ,IAEnC,MAAMggB,MAAQD,SAAStzD,KAAK+7C,QACnBqX,OAAOxN,QAAQ7J,OAAOyX,WAAYzX,OAAO50C,QAGlDisD,OAAOxN,QAAQ2N,OAAO,CAACz6B,IAAU4tB,YAC/B,GAAI5tB,IAAK,CACP0a,OAAO1a,KACP,MACF,CACAya,QAAQmT,SAAS,GACjB,GAGR,CAKA,MAAM+M,8BAAgCpE,cAAcI,4BAKpD,MAAMiE,0BAA4BrE,cAAcgB,wBAKhD,MAAMsD,qCAAuCtE,cAC3Cc,mCAMF,MAAMyD,sBAAwBvE,cAAciB,oBAK5C,MAAMuD,0BAA4BxE,cAAcsB,wBAKhD,MAAMmD,2BAA6BzE,cAAcuB,yBAKjD,MAAMmD,cAAgB1E,cAActnD,UAmBpC,MAAMisD,mBAAqB1E,wBACzBH,KAAK,CACHjzC,MAAOnU,SACPksD,YAAalsD,SACbmsD,eAAgBnsD,SAChBosD,uBAAwBtoE,MAAMwiE,wBAsBlC,MAAM+F,kBAAoBjF,KAAK,CAC7Ba,OAAQxkE,SACR6oE,SAAUzT,SAAS74C,UACnBusD,SAAUvsD,SACVwsD,eAAgB1T,SAASr1D,YAsB3B,MAAMgpE,8BAAgClF,wBACpCzjE,MACEsjE,KAAK,CACHv2B,QAASy1B,oBACT2B,OAAQxkE,SACR6oE,SAAUzT,SAAS74C,UACnBusD,SAAUvsD,SACVwsD,eAAgB1T,SAASr1D,cAQ/B,MAAMipE,wBAA0BnF,wBAC9BzjE,MACEsjE,KAAK,CACHl2B,OAAQo1B,oBACRxmB,QAASsnB,KAAK,CACZtS,WAAY52C,UACZ62C,MAAOuR,oBACP7T,SAAUzyC,SACV3b,KAAMmiE,yBACN6C,UAAWrpD,eAMnB,MAAM2sD,wBAA0BvF,KAAK,CACnC3S,QAAShxD,SACT0E,OAAQkxD,UACR3G,MAAO1yC,WAMT,MAAM4sD,8BAAgCrF,wBACpCzjE,MACEsjE,KAAK,CACHl2B,OAAQo1B,oBACRxmB,QAASsnB,KAAK,CACZtS,WAAY52C,UACZ62C,MAAOuR,oBACP7T,SAAUzyC,SACV3b,KAAMsoE,wBACNtD,UAAWrpD,eAiBnB,MAAM6sD,4BAA8BtF,wBAClCzjE,MACEsjE,KAAK,CACH3U,SAAUzyC,SACV6wB,QAASy1B,wBAQf,MAAMwG,kBAAoB1F,KAAK,CAC7BtS,WAAY52C,UACZ62C,MAAOuR,oBACP7T,SAAUzyC,SACV3b,KAAMmiE,yBACN6C,UAAWrpD,WAMb,MAAM+sD,uBAAyB3F,KAAK,CAClCl2B,OAAQo1B,oBACRxmB,QAASgtB,oBAGX,MAAME,uBAAyBnV,OAC7B3jB,MAAM,CAAC/hC,SAAS1R,cAAMA,QAAGksE,0BACzBz4B,MAAM,CAACqyB,qBAAsBoG,2BAC7BhtE,QACE,GAAIlD,MAAM2H,QAAQzE,OAAQ,CACxB,OAAOoS,OAAOpS,MAAO6mE,yBACvB,KAAO,CACL,OAAO7mE,KACT,KAOJ,MAAMstE,wBAA0B7F,KAAK,CACnCtS,WAAY52C,UACZ62C,MAAOuR,oBACP7T,SAAUzyC,SACV3b,KAAM2oE,uBACN3D,UAAWrpD,WAGb,MAAMktD,6BAA+B9F,KAAK,CACxCl2B,OAAQo1B,oBACRxmB,QAASmtB,0BAMX,MAAME,sBAAwB/F,KAAK,CACjC/xD,MAAO6+B,MAAM,CACXwkB,QAAQ,UACRA,QAAQ,YACRA,QAAQ,cACRA,QAAQ,kBAEV0U,OAAQptD,SACRqtD,SAAUrtD,WAOZ,MAAMstD,2CAA6ChG,cACjDxjE,MACEsjE,KAAK,CACH3sB,UAAWh3C,SACXkyD,KAAM31C,SACN+wB,IAAK+3B,uBACLyE,KAAM1U,SAASp1D,UACf+pE,UAAW1U,SAASD,SAAS74C,eAQnC,MAAMytD,iCAAmCnG,cACvCxjE,MACEsjE,KAAK,CACH3sB,UAAWh3C,SACXkyD,KAAM31C,SACN+wB,IAAK+3B,uBACLyE,KAAM1U,SAASp1D,UACf+pE,UAAW1U,SAASD,SAAS74C,eAQnC,MAAM0tD,0BAA4BtG,KAAK,CACrCuG,aAAc3tD,SACdL,OAAQ6nD,6BAA6BsF,qBAMvC,MAAMc,yBAA2BxG,KAAK,CACpCl2B,OAAQo1B,oBACRxmB,QAASgtB,oBAMX,MAAMe,iCAAmCzG,KAAK,CAC5CuG,aAAc3tD,SACdL,OAAQ6nD,6BAA6BoG,4BAMvC,MAAME,eAAiB1G,KAAK,CAC1B2G,OAAQ/tD,SACR21C,KAAM31C,SACNa,KAAMb,WAMR,MAAMguD,uBAAyB5G,KAAK,CAClCuG,aAAc3tD,SACdL,OAAQmuD,iBAiEV,MAAMG,iBAAmB/5B,MAAM,CAC7BkzB,KAAK,CACHjjE,KAAM+vC,MAAM,CACVwkB,QAAQ,sBACRA,QAAQ,aACRA,QAAQ,0BACRA,QAAQ,UAEV/C,KAAM31C,SACNkuD,UAAWluD,WAEbonD,KAAK,CACHjjE,KAAMu0D,QAAQ,eACdqV,OAAQ/tD,SACR21C,KAAM31C,SACNkuD,UAAWluD,WAEbonD,KAAK,CACHjjE,KAAMu0D,QAAQ,UACd/C,KAAM31C,SACNkuD,UAAWluD,SACXmuD,MAAO/G,KAAK,CACVgH,sBAAuBpuD,SACvBquD,0BAA2BruD,SAC3BsuD,sBAAuBtuD,SACvBuuD,wBAAyBvuD,aAG7BonD,KAAK,CACHjjE,KAAMu0D,QAAQ,QACd/C,KAAM31C,SACNkuD,UAAWluD,SACX+wB,IAAKttC,aAOT,MAAM+qE,6BAA+BpH,KAAK,CACxCuG,aAAc3tD,SACdL,OAAQsuD,mBAMV,MAAMQ,4BAA8BrH,KAAK,CACvCuG,aAAc3tD,SACdL,OAAQ6nD,6BACNtzB,MAAM,CAAC60B,sBAAuBC,6BAOlC,MAAM0F,uBAAyBtH,KAAK,CAClCuG,aAAc3tD,SACdL,OAAQK,WAGV,MAAM2uD,kBAAoBvH,KAAK,CAC7Bl2B,OAAQztC,SACRmrE,OAAQ/V,SAASp1D,UACjBorE,IAAKhW,SAASp1D,UACdihE,IAAK7L,SAASp1D,UACds8C,QAAS8Y,SAASp1D,YAGpB,MAAMqrE,sBAAwB1H,KAAK,CACjC2H,WAAYtrE,SACZurE,WAAYvrE,SACZwrE,eAAgBjvD,SAChBkvD,iBAAkBhxD,UAClBixD,aAAcrrE,MAAMw0D,MAAM,CAACt4C,SAAUA,SAAUA,YAC/CmoD,WAAYnoD,SACZovD,SAAUpvD,SACVqvD,SAAUxW,SAAS74C,YAMrB,MAAMsvD,gBAAkBhI,cACtBF,KAAK,CACH7iC,QAASzgC,MAAMgrE,uBACfS,WAAYzrE,MAAMgrE,0BAItB,MAAMU,mBAAqBt7B,MAAM,CAC/BwkB,QAAQ,aACRA,QAAQ,aACRA,QAAQ,eAGV,MAAM+W,wBAA0BrI,KAAK,CACnCzR,KAAM31C,SACN0vD,cAAe7W,SAAS74C,UACxB+wB,IAAK+3B,uBACL6G,mBAAoB7W,SAAS0W,sBAM/B,MAAMI,8BAAgCrI,wBACpCzjE,MAAM+0D,SAAS4W,2BAMjB,MAAMI,2CAA6CvI,cAActnD,UAEjE,MAAM8vD,yBAA2B1I,KAAK,CACpCroB,WAAYunB,oBACZ7nB,gBAAiB36C,MAAMkc,UACvB6+B,gBAAiB/6C,MAAMkc,YAGzB,MAAM+vD,2BAA6B3I,KAAK,CACtCriB,WAAYjhD,MAAML,UAClBuM,QAASo3D,KAAK,CACZznB,YAAa77C,MAAML,UACnBy6C,OAAQkpB,KAAK,CACXjpB,sBAAuBn+B,SACvBo+B,0BAA2Bp+B,SAC3Bq+B,4BAA6Br+B,WAE/Bs7B,aAAcx3C,MACZsjE,KAAK,CACHnnB,SAAUn8C,MAAMkc,UAChB3b,KAAMZ,SACNm4C,eAAgB57B,YAGpB4/B,gBAAiBn8C,SACjBy8C,oBAAqB4Y,SAASh1D,MAAMgsE,+BAIxC,MAAME,oBAAsB5I,KAAK,CAC/Bl2B,OAAQo1B,oBACR1e,OAAQ1pC,UACRtO,SAAUsO,UACVqnB,OAAQuzB,SAAS5kB,MAAM,CAACwkB,QAAQ,eAAgBA,QAAQ,oBAG1D,MAAMuX,uCAAyC7I,KAAK,CAClDznB,YAAa77C,MAAMksE,qBACnBjrB,WAAYjhD,MAAML,YAGpB,MAAMysE,wBAA0B9I,KAAK,CACnCj/D,OAAQkxD,UACR5E,QAAShxD,SACT+sC,UAAW81B,sBAGb,MAAM6J,qBAAuB/I,KAAK,CAChCnnB,SAAUn8C,MAAMwiE,qBAChBjiE,KAAMZ,SACN+sC,UAAW81B,sBAGb,MAAM8J,kBAAoBl8B,MAAM,CAC9Bi8B,qBACAD,0BAGF,MAAMG,yBAA2Bn8B,MAAM,CACrCkzB,KAAK,CACHj/D,OAAQkxD,UACR5E,QAAShxD,SACT+sC,UAAW/sC,WAEb2jE,KAAK,CACHnnB,SAAUn8C,MAAML,UAChBY,KAAMZ,SACN+sC,UAAW/sC,aAIf,MAAM6sE,uBAAyBzY,OAC7BuY,kBACAC,0BACA1wE,QACE,GAAI,aAAcA,MAAO,CACvB,OAAOoS,OAAOpS,MAAOwwE,qBACvB,KAAO,CACL,OAAOp+D,OAAOpS,MAAOuwE,wBACvB,KAOJ,MAAMK,iCAAmCnJ,KAAK,CAC5CriB,WAAYjhD,MAAML,UAClBuM,QAASo3D,KAAK,CACZznB,YAAa77C,MAAMksE,qBACnB10B,aAAcx3C,MAAMwsE,wBACpB1wB,gBAAiBn8C,SACjBy8C,oBAAqB4Y,SAASD,SAAS/0D,MAAMgsE,gCAIjD,MAAMU,mBAAqBpJ,KAAK,CAC9BqJ,aAAczwD,SACd0wD,KAAMjtE,SACNsxD,MAAO+D,SAASr1D,UAChB+sC,UAAWsoB,SAASr1D,UACpBktE,cAAetE,oBAGjB,MAAMuE,sBAAwBxJ,KAAK,CACjCx3D,SAAU9L,MAAMwiE,qBAChBprB,SAAUp3C,MAAMwiE,uBAMlB,MAAMuK,+BAAiCzJ,KAAK,CAC1Cr2B,IAAK+3B,uBACLgI,IAAK9wD,SACLwpD,kBAAmB1Q,SACjBD,SACE/0D,MACEsjE,KAAK,CACHxzC,MAAO5T,SACPs7B,aAAcx3C,MACZsjE,KAAK,CACHnnB,SAAUn8C,MAAMkc,UAChB3b,KAAMZ,SACNm4C,eAAgB57B,iBAO5B+wD,YAAajtE,MAAMkc,UACnBgxD,aAAcltE,MAAMkc,UACpB6rC,YAAaiN,SAASD,SAAS/0D,MAAML,YACrCwtE,iBAAkBnY,SAASD,SAAS/0D,MAAM0sE,sBAC1CU,kBAAmBpY,SAASD,SAAS/0D,MAAM0sE,sBAC3CW,gBAAiBrY,SAAS8X,uBAC1BQ,qBAAsBtY,SAAS94C,UAC/BqxD,UAAWvY,SAAS94C,YAMtB,MAAMsxD,qCAAuClK,KAAK,CAChDr2B,IAAK+3B,uBACLgI,IAAK9wD,SACLwpD,kBAAmB1Q,SACjBD,SACE/0D,MACEsjE,KAAK,CACHxzC,MAAO5T,SACPs7B,aAAcx3C,MAAMwsE,6BAK5BS,YAAajtE,MAAMkc,UACnBgxD,aAAcltE,MAAMkc,UACpB6rC,YAAaiN,SAASD,SAAS/0D,MAAML,YACrCwtE,iBAAkBnY,SAASD,SAAS/0D,MAAM0sE,sBAC1CU,kBAAmBpY,SAASD,SAAS/0D,MAAM0sE,sBAC3CW,gBAAiBrY,SAAS8X,uBAC1BQ,qBAAsBtY,SAAS94C,UAC/BqxD,UAAWvY,SAAS94C,YAGtB,MAAMuxD,yBAA2Br9B,MAAM,CAACwkB,QAAQ,GAAIA,QAAQ,YAG5D,MAAM8Y,cAAgBpK,KAAK,CACzBl2B,OAAQztC,SACRgvD,SAAUzyC,SACVkoD,YAAarP,SAAS74C,UACtByxD,WAAY5Y,SAASp1D,UACrB0kE,WAAYrP,SAASD,SAAS74C,aAMhC,MAAM0xD,kBAAoBpK,cACxBzO,SACEuO,KAAK,CACH7hB,UAAW9hD,SACXkuE,kBAAmBluE,SACnBmuE,WAAY5xD,SACZk1C,aAAcpxD,MACZsjE,KAAK,CACHtlB,YAAaiuB,2BACbj0B,KAAM+c,SAASgY,gCACf9wB,QAAS+Y,SAASyY,6BAGtBM,QAAS/Y,SAASh1D,MAAM0tE,gBACxBhE,UAAW3U,SAAS74C,UACpB0oD,YAAa7P,SAAS74C,cAQ5B,MAAM8xD,0BAA4BxK,cAChCzO,SACEuO,KAAK,CACH7hB,UAAW9hD,SACXkuE,kBAAmBluE,SACnBmuE,WAAY5xD,SACZ6xD,QAAS/Y,SAASh1D,MAAM0tE,gBACxBhE,UAAW3U,SAAS74C,UACpB0oD,YAAa7P,SAAS74C,cAQ5B,MAAM+xD,8BAAgCzK,cACpCzO,SACEuO,KAAK,CACH7hB,UAAW9hD,SACXkuE,kBAAmBluE,SACnBmuE,WAAY5xD,SACZk1C,aAAcpxD,MACZsjE,KAAK,CACHtlB,YAAamuB,uCACbn0B,KAAM+c,SAASgY,gCACf9wB,QAAS+Y,SAASyY,6BAGtBM,QAAS/Y,SAASh1D,MAAM0tE,gBACxBhE,UAAW3U,SAAS74C,UACpB0oD,YAAa7P,SAAS74C,cAQ5B,MAAMgyD,wBAA0B1K,cAC9BzO,SACEuO,KAAK,CACH7hB,UAAW9hD,SACXkuE,kBAAmBluE,SACnBmuE,WAAY5xD,SACZk1C,aAAcpxD,MACZsjE,KAAK,CACHtlB,YAAayuB,iCACbz0B,KAAM+c,SAASyY,sCACfvxB,QAAS+Y,SAASyY,6BAGtBM,QAAS/Y,SAASh1D,MAAM0tE,gBACxBhE,UAAW3U,SAAS74C,UACpB0oD,YAAa7P,SAAS74C,cAQ5B,MAAMiyD,oCAAsC3K,cAC1CzO,SACEuO,KAAK,CACH7hB,UAAW9hD,SACXkuE,kBAAmBluE,SACnBmuE,WAAY5xD,SACZk1C,aAAcpxD,MACZsjE,KAAK,CACHtlB,YAAamuB,uCACbn0B,KAAM+c,SAASyY,sCACfvxB,QAAS+Y,SAASyY,6BAGtBM,QAAS/Y,SAASh1D,MAAM0tE,gBACxBhE,UAAW3U,SAAS74C,UACpB0oD,YAAa7P,SAAS74C,cAQ5B,MAAMkyD,gCAAkC5K,cACtCzO,SACEuO,KAAK,CACH7hB,UAAW9hD,SACXkuE,kBAAmBluE,SACnBmuE,WAAY5xD,SACZ6xD,QAAS/Y,SAASh1D,MAAM0tE,gBACxBhE,UAAW3U,SAAS74C,UACpB0oD,YAAa7P,SAAS74C,cAU5B,MAAMmyD,2BAA6B7K,cACjCzO,SACEuO,KAAK,CACH7hB,UAAW9hD,SACXkuE,kBAAmBluE,SACnBmuE,WAAY5xD,SACZk1C,aAAcpxD,MACZsjE,KAAK,CACHtlB,YAAaiuB,2BACbj0B,KAAM+c,SAASgY,mCAGnBgB,QAAS/Y,SAASh1D,MAAM0tE,gBACxBhE,UAAW3U,SAAS74C,cAQ1B,MAAMoyD,4BAA8B9K,cAClCzO,SACEuO,KAAK,CACH7hB,UAAW9hD,SACXkuE,kBAAmBluE,SACnBmuE,WAAY5xD,SACZ+kC,WAAYjhD,MAAML,UAClB+pE,UAAW3U,SAAS74C,cAQ1B,MAAMqyD,wBAA0B/K,cAC9BzO,SACEuO,KAAK,CACHzR,KAAM31C,SACN87B,KAAM+c,SAASgY,gCACfrD,UAAW1U,SAASD,SAAS74C,WAC7B8hC,YAAaiuB,2BACbhwB,QAAS+Y,SAASyY,8BAQxB,MAAMe,8BAAgChL,cACpCzO,SACEuO,KAAK,CACHzR,KAAM31C,SACN8hC,YAAayuB,iCACbz0B,KAAM+c,SAASyY,sCACf9D,UAAW1U,SAASD,SAAS74C,WAC7B+/B,QAAS+Y,SAASyY,8BAQxB,MAAMgB,4BAA8BhL,wBAClCH,KAAK,CACH7hB,UAAW9hD,SACXwhD,qBAAsBjlC,YAO1B,MAAMwyD,0BAA4BjL,wBAAwBrpD,WAE1D,MAAMu0D,iBAAmBrL,KAAK,CAC5BzR,KAAM31C,SACN0yD,gBAAiB1yD,SACjB2yD,SAAU3yD,SACV4yD,iBAAkB5yD,WAMpB,MAAM6yD,qCAAuCvL,cAC3CxjE,MAAM2uE,mBAMR,MAAMK,0BAA4BvL,wBAChC1O,SACEuO,KAAK,CACH1Y,cAAe0Y,KAAK,CAClB2L,qBAAsB/yD,eAS9B,MAAMgzD,wBAA0B1L,cAAc7jE,UAK9C,MAAMwvE,yBAA2B3L,cAAc7jE,UA0T/C,MAAMyvE,WAAa9L,KAAK,CACtBr2B,IAAK+3B,uBACL7d,KAAMnnD,MAAML,UACZg3C,UAAWh3C,WAeb,MAAM0vE,uBAAyB/L,KAAK,CAClCznD,OAAQ6nD,6BAA6B0L,YACrCvF,aAAc3tD,WAyHhB,MAAM8qD,oBAAsB,CAC1B,gBAAiB,MAAM91D,uBAMlB,MAAMo+D,WAoFX1jE,YACEm2D,SACAgB,qBArFFllE,KAAiB0xE,iBAAW,EAC5B1xE,KAAiB2xE,uCAAiC,EAClD3xE,KAAiByzD,kBAAY,EAC7BzzD,KAAiB4xE,oBAAc,EAC/B5xE,KAAiB6xE,gBAAU,EAC3B7xE,KAAiB8xE,iBAAW,EAC5B9xE,KAAiB+xE,sBAAgB,EACjC/xE,KAAiBgyE,mBAAa,EAC9BhyE,KAAiBiyE,uBAAkC,MACnDjyE,KAAiBkyE,uBAEN,KACXlyE,KAAiBmyE,yBAEN,KACXnyE,KAMYoyE,wBAAkC,EAE9CpyE,KAAiBqyE,yBAAoC,MACrDryE,KAAiBsyE,kBAA6B,MAC9CtyE,KAAiBuyE,eAKb,CACFC,gBAAiB,KACjBC,UAAW,EACXC,sBAAuB,GACvBC,oBAAqB,IAGvB3yE,KAAyB4yE,0BAAkD,EAC3E5yE,KAAyB6yE,oDAIrB,CAAE,EACN7yE,KAAyB8yE,wCAIrB,CAAE,EACN9yE,KAAyB+yE,wCAIrB,CAAE,EACN/yE,KAAyBgzE,6CAIrB,CAAE,EACNhzE,KAAyBizE,qBAErB,CAAE,EAcNjzE,KAAyBkzE,gCACvB,IAAIntB,IA8uDN/lD,KAGAmzE,eAAiB,MACf,MAAMC,gBAAqD,CAAE,EAC7D,OAAO1tB,2BAGL,MAAMiG,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,GACA1nB,WACA1rD,UACA4mD,QAEF,MAAMysB,YAAcze,oBAAoBp3C,MACxC21D,gBAAgBE,aACdF,gBAAgBE,cAChB,WACE,IACE,MAAMC,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OAAOmjE,UAAW5N,cAActnD,WAC5C,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,yCAEJ,CACA,OAAO+H,IAAI2W,MACb,CAAU,eACDo1D,gBAAgBE,YACzB,CACD,EAdD,GAeF,aAAaF,gBAAgBE,YAAY,CAE5C,EAjCgB,GAruDf,IAAIE,WACJ,IAAIrL,YACJ,IAAI3J,MACJ,IAAI6J,gBACJ,IAAIC,wBACJ,IAAIC,UACJ,GAAIrD,4BAA6BA,sBAAuB,SAAU,CAChEllE,KAAK0xE,YAAcxM,mBACpB,MAAM,GAAIA,oBAAoB,CAC7BllE,KAAK0xE,YAAcxM,oBAAmBvZ,WACtC3rD,KAAK2xE,kCACHzM,oBAAmBuO,iCACrBD,WAAatO,oBAAmBsO,WAChCrL,YAAcjD,oBAAmBiD,YACjC3J,MAAQ0G,oBAAmB1G,MAC3B6J,gBAAkBnD,oBAAmBmD,gBACrCC,wBAA0BpD,oBAAmBoD,wBAC7CC,UAAYrD,oBAAmBqD,SACjC,CAEAvoE,KAAKyzD,aAAesR,kBAAkBb,UACtClkE,KAAK4xE,eAAiB4B,YAAcvP,iBAAiBC,UAErDlkE,KAAK6xE,WAAa3J,gBAChBhE,SACAiE,YACA3J,MACA6J,gBACAC,wBACAC,WAEFvoE,KAAK8xE,YAAcrI,iBAAiBzpE,KAAK6xE,YACzC7xE,KAAK+xE,iBAAmBpI,sBAAsB3pE,KAAK6xE,YAEnD7xE,KAAKgyE,cAAgB,IAAInP,mBAAmB7iE,KAAK4xE,eAAgB,CAC/DvQ,YAAa,MACbK,eAAgB9jE,WAElBoC,KAAKgyE,cAAchS,GAAG,OAAQhgE,KAAK0zE,UAAUz9B,KAAKj2C,OAClDA,KAAKgyE,cAAchS,GAAG,QAAShgE,KAAK2zE,WAAW19B,KAAKj2C,OACpDA,KAAKgyE,cAAchS,GAAG,QAAShgE,KAAK4zE,WAAW39B,KAAKj2C,OACpDA,KAAKgyE,cAAchS,GACjB,sBACAhgE,KAAK6zE,yBAAyB59B,KAAKj2C,OAErCA,KAAKgyE,cAAchS,GACjB,sBACAhgE,KAAK8zE,gCAAgC79B,KAAKj2C,OAE5CA,KAAKgyE,cAAchS,GACjB,mBACAhgE,KAAK+zE,sBAAsB99B,KAAKj2C,OAElCA,KAAKgyE,cAAchS,GACjB,2BACAhgE,KAAKg0E,6BAA6B/9B,KAAKj2C,OAEzCA,KAAKgyE,cAAchS,GACjB,wBACAhgE,KAAKi0E,2BAA2Bh+B,KAAKj2C,OAEvCA,KAAKgyE,cAAchS,GACjB,mBACAhgE,KAAKk0E,sBAAsBj+B,KAAKj2C,OAElCA,KAAKgyE,cAAchS,GACjB,mBACAhgE,KAAKm0E,sBAAsBl+B,KAAKj2C,MAEpC,CAKI2rD,iBACF,OAAO3rD,KAAK0xE,WACd,CAKI0C,kBACF,OAAOp0E,KAAKyzD,YACd,CAKA/N,2BACE93B,UACAs3C,oBAGA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,CAACzlD,UAAU6gB,YACXkd,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,aAAcr0D,MACvD,MAAMpW,IAAM+I,OAAOmjE,UAAW3N,wBAAwBvnD,WACtD,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,6BAA6BsuB,UAAU6gB,aAE3C,CACA,OAAOpnC,IAAI2W,MACb,CAKA0nC,iBACE93B,UACAs3C,oBAEA,aAAallE,KAAKq0E,qBAAqBzmD,UAAWs3C,oBAC/Clb,MAAKjnD,GAAKA,EAAE/E,QACZmsD,OAAMhtD,IACL,MAAM,IAAI7B,MACR,oCAAsCsyB,UAAU6gB,WAAa,KAAOtxC,EACrE,GAEP,CAKAuoD,mBAAmBsO,MACjB,MAAMuf,gBAAkBvzE,KAAK8xE,YAAY,eAAgB,CAAC9d,OAC1D,MAAM3sD,IAAM+I,OAAOmjE,UAAW5N,cAAczO,SAAS74C,YACrD,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,qCAAqC00D,OAEzC,CACA,OAAO3sD,IAAI2W,MACb,CAMA0nC,6BACE,MAAM6tB,gBAAkBvzE,KAAK8xE,YAAY,oBAAqB,IAC9D,MAAMzqE,IAAM+I,OAAOmjE,UAAW5N,cAActnD,WAC5C,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,oCAEJ,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,+BACE,MAAM6tB,gBAAkBvzE,KAAK8xE,YAAY,yBAA0B,IACnE,MAAMzqE,IAAM+I,OAAOmjE,UAAWlJ,eAC9B,GAAI,UAAWhjE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,sCAEJ,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,gBACEmB,QAEA,IAAIytB,UAA6B,CAAE,EACnC,UAAWztB,SAAW,SAAU,CAC9BytB,UAAY,CAAC3oB,WAAY9E,OAC1B,MAAM,GAAIA,OAAQ,CACjBytB,UAAY,IACPztB,OACH8E,WAAa9E,QAAUA,OAAO8E,YAAe3rD,KAAK2rD,WAEtD,KAAO,CACL2oB,UAAY,CACV3oB,WAAY3rD,KAAK2rD,WAErB,CAEA,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,YAAa,CAACwC,YACvD,MAAMjtE,IAAM+I,OAAOmjE,UAAWjJ,oBAC9B,GAAI,UAAWjjE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,uBAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,qBACE6uB,iBACA5oB,YAEA,MAAMluC,KAAOzd,KAAKqzE,WAAW,CAACkB,iBAAiB9lC,YAAakd,YAC5D,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OAAOmjE,UAAW3N,wBAAwB8E,oBACtD,GAAI,UAAWrjE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,6BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,6BACE8uB,aACA7oB,YAEA,MAAMluC,KAAOzd,KAAKqzE,WAAW,CAACmB,aAAa/lC,YAAakd,YACxD,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,yBAA0Br0D,MACnE,MAAMpW,IAAM+I,OAAOmjE,UAAW3N,wBAAwB8E,oBACtD,GAAI,UAAWrjE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,sCAEJ,CACA,OAAO+H,IAAI2W,MACb,CAOA0nC,8BACE+uB,aACAt4B,OACA+oB,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,IAAIwP,MAAe,CAACD,aAAahmC,YACjC,GAAI,SAAU0N,OAAQ,CACpBu4B,MAAMp4E,KAAK,CAACyyE,KAAM5yB,OAAO4yB,KAAKtgC,YAChC,KAAO,CACLimC,MAAMp4E,KAAK,CAACuyC,UAAWsN,OAAOtN,UAAUJ,YAC1C,CAEA,MAAMhxB,KAAOzd,KAAKqzE,WAAWqB,MAAO/oB,WAAY,SAAU9E,QAC1D,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,0BAA2Br0D,MACpE,MAAMpW,IAAM+I,OAAOmjE,UAAWxI,yBAC9B,GAAI,UAAW1jE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,iDAAiDm1E,aAAahmC,aAElE,CACA,OAAOpnC,IAAI2W,MACb,CAOA0nC,oCACE+uB,aACAt4B,OACAwP,YAMA,IAAI+oB,MAAe,CAACD,aAAahmC,YACjC,GAAI,SAAU0N,OAAQ,CACpBu4B,MAAMp4E,KAAK,CAACyyE,KAAM5yB,OAAO4yB,KAAKtgC,YAChC,KAAO,CACLimC,MAAMp4E,KAAK,CAACuyC,UAAWsN,OAAOtN,UAAUJ,YAC1C,CAEA,MAAMhxB,KAAOzd,KAAKqzE,WAAWqB,MAAO/oB,WAAY,cAChD,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,0BAA2Br0D,MACpE,MAAMpW,IAAM+I,OAAOmjE,UAAWtI,+BAC9B,GAAI,UAAW5jE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,iDAAiDm1E,aAAahmC,aAElE,CACA,OAAOpnC,IAAI2W,MACb,CAKA0nC,yBACEmB,QAEA,MAAMvmD,IAAM,IACPumD,OACH8E,WAAa9E,QAAUA,OAAO8E,YAAe3rD,KAAK2rD,YAEpD,MAAMluC,KAAOnd,IAAI67C,QAAU77C,IAAIqrD,WAAa,CAACrrD,KAAO,GACpD,MAAMizE,gBAAkBvzE,KAAK8xE,YAAY,qBAAsBr0D,MAC/D,MAAMpW,IAAM+I,OAAOmjE,UAAWrI,6BAC9B,GAAI,UAAW7jE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,iCAC1C,CACA,OAAO+H,IAAI2W,MACb,CAMA0nC,8BACEivB,YACAhpB,YAEA,MAAMluC,KAAOzd,KAAKqzE,WAAW,CAACsB,YAAYlmC,YAAakd,YACvD,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,0BAA2Br0D,MACpE,MAAMpW,IAAM+I,OAAOmjE,UAAWzI,+BAC9B,GAAI,UAAWzjE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,uCAEJ,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,+BACE93B,UACAs3C,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,CAACzlD,UAAU6gB,YACXkd,WACA,SACA9E,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OACVmjE,UACA3N,wBAAwB1O,SAASiU,qBAEnC,GAAI,UAAW9jE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,oCAAoCsuB,UAAU6gB,aAElD,CACA,OAAOpnC,IAAI2W,MACb,CAKA0nC,2BACE93B,UACAs3C,oBAIA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,CAACzlD,UAAU6gB,YACXkd,WACA,aACA9E,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OACVmjE,UACA3N,wBAAwB1O,SAASoU,2BAEnC,GAAI,UAAWjkE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,oCAAoCsuB,UAAU6gB,aAElD,CACA,OAAOpnC,IAAI2W,MACb,CAKA0nC,qBACE93B,UACAs3C,oBAEA,IACE,MAAM79D,UAAYrH,KAAK40E,yBACrBhnD,UACAs3C,oBAEF,OAAO79D,IAAIrJ,KACZ,CAAC,MAAOb,GACP,MAAM,IAAI7B,MACR,oCAAsCsyB,UAAU6gB,WAAa,KAAOtxC,EAExE,CACF,CAKAuoD,gCACEmvB,WACAC,WAIA,MAAMnpB,WAACA,WAAU9E,OAAEA,QAAUoe,4BAA4B6P,WACzD,MAAM7mC,KAAO4mC,WAAWv+D,KAAI0M,KAAOA,IAAIyrB,aACvC,MAAMhxB,KAAOzd,KAAKqzE,WAAW,CAACplC,MAAO0d,WAAY,aAAc9E,QAC/D,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,sBAAuBr0D,MAChE,MAAMpW,IAAM+I,OACVmjE,UACA3N,wBAAwBzjE,MAAM+0D,SAASoU,4BAEzC,GAAI,UAAWjkE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,mCAAmC2uC,OAEvC,CACA,OAAO5mC,IAAI2W,MACb,CAKA0nC,wCACEmvB,WACA3P,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMj3B,KAAO4mC,WAAWv+D,KAAI0M,KAAOA,IAAIyrB,aACvC,MAAMhxB,KAAOzd,KAAKqzE,WAAW,CAACplC,MAAO0d,WAAY,SAAU9E,QAC3D,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,sBAAuBr0D,MAChE,MAAMpW,IAAM+I,OACVmjE,UACA3N,wBAAwBzjE,MAAM+0D,SAASiU,sBAEzC,GAAI,UAAW9jE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,mCAAmC2uC,OAEvC,CACA,OAAO5mC,IAAI2W,MACb,CAKA0nC,8BACEmvB,WACA3P,oBAEA,MAAM79D,UAAYrH,KAAK+0E,kCACrBF,WACA3P,oBAEF,OAAO79D,IAAIrJ,KACb,CAOA0nD,yBACE93B,UACAs3C,mBACAlH,OAEA,MAAMrS,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,CAACzlD,UAAU6gB,YACXkd,WACA1rD,UACA,IACK4mD,OACHmX,MAAOA,OAAS,KAAOA,MAAQnX,QAAQmX,QAI3C,MAAMuV,gBAAkBvzE,KAAK8xE,YAAY,qBAAsBr0D,MAC/D,MAAMpW,IAAM+I,OAAOmjE,UAAW5N,cAAc6F,wBAC5C,GAAI,UAAWnkE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,kCAAkCsuB,UAAU6gB,aAEhD,CACA,OAAOpnC,IAAI2W,MACb,CAkBA0nC,yBACE7W,UACAmmC,oBAKA,MAAMrpB,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4B+P,oBAC9B,MAAMrzE,SAACA,YAAaszE,uBAAyBpuB,QAAU,CAAE,EACzD,MAAMppC,KAAOzd,KAAKqzE,WAChB,CAACxkC,UAAUJ,YACXkd,WACAhqD,UAAY,SACZ,IACKszE,yBACCA,sBAAsB3P,QACtB,CACEA,QAASD,oCACP4P,sBAAsB3P,UAG1B,OAGR,MAAMiO,gBAAkBvzE,KAAK8xE,YAAY,qBAAsBr0D,MAC/D,MAAMy3D,WAAa/yE,MAAMipE,wBACzB,MAAM/jE,IACJ4tE,sBAAsBE,cAAgB,KAClC/kE,OAAOmjE,UAAW3N,wBAAwBsP,aAC1C9kE,OAAOmjE,UAAW5N,cAAcuP,aACtC,GAAI,UAAW7tE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,2CAA2CuvC,UAAUJ,aAEzD,CACA,OAAOpnC,IAAI2W,MACb,CAOA0nC,+BACE7W,UACAmmC,oBAOA,MAAMrpB,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4B+P,oBAC9B,MAAMv3D,KAAOzd,KAAKqzE,WAChB,CAACxkC,UAAUJ,YACXkd,WACA,aACA9E,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,qBAAsBr0D,MAC/D,MAAMpW,IAAM+I,OACVmjE,UACA5N,cAAcxjE,MAAMopE,gCAEtB,GAAI,UAAWlkE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,2CAA2CuvC,UAAUJ,aAEzD,CACA,OAAOpnC,IAAI2W,MACb,CAeA0nC,yBACE0vB,SACAzpB,YAEA,IAAI0pB,aAEJ,UAAWD,UAAY,SAAU,CAC/BC,aAAeD,QACjB,KAAO,CACL,MAAMvuB,OAASuuB,SAEf,GAAIvuB,OAAOmF,aAAaspB,QAAS,CAC/B,OAAO1rB,QAAQE,OAAOjD,OAAOmF,YAAY2U,OAC3C,CACA0U,aAAexuB,OAAO/N,SACxB,CAEA,IAAIy8B,iBAEJ,IACEA,iBAAmB1wC,KAAKF,OAAO0wC,aAChC,CAAC,MAAOjmC,KACP,MAAM,IAAI9zC,MAAM,qCAAuC+5E,aACzD,CAEA7kD,SAAO+kD,iBAAiBr6E,SAAW,GAAI,gCAEvC,UAAWk6E,WAAa,SAAU,CAChC,aAAap1E,KAAKw1E,6CAA6C,CAC7D7pB,WAAYA,YAAc3rD,KAAK2rD,WAC/B7S,UAAWu8B,cAEf,MAAO,GAAI,yBAA0BD,SAAU,CAC7C,aAAap1E,KAAKy1E,qDAAqD,CACrE9pB,WAAYA,YAAc3rD,KAAK2rD,WAC/BypB,mBAEJ,KAAO,CACL,aAAap1E,KAAK01E,4CAA4C,CAC5D/pB,WAAYA,YAAc3rD,KAAK2rD,WAC/BypB,mBAEJ,CACF,CAEQO,uBAAuBC,QAC7B,OAAO,IAAIhsB,SAAe,CAAC7wC,EAAG+wC,UAC5B,GAAI8rB,QAAU,KAAM,CAClB,MACF,CACA,GAAIA,OAAON,QAAS,CAClBxrB,OAAO8rB,OAAOjV,OAChB,KAAO,CACLiV,OAAO5U,iBAAiB,SAAS,KAC/BlX,OAAO8rB,OAAOjV,OAAO,GAEzB,IAEJ,CAEQkV,mCAAkClqB,WACxCA,WAAU7S,UACVA,YAWA,IAAIg9B,wBACJ,IAAIC,gDAGJ,IAAIngB,KAAO,MACX,MAAMogB,oBAAsB,IAAIpsB,SAG7B,CAACC,QAASC,UACX,IACEgsB,wBAA0B91E,KAAKi2E,YAC7Bn9B,WACA,CAAC96B,OAAyBmP,WACxB2oD,wBAA0B71E,UAC1B,MAAM+8D,SAAW,CACf7vC,gBACAnvB,MAAOggB,QAET6rC,QAAQ,CAACqsB,OAAQlzB,kBAAkBmzB,UAAWnZ,mBAAU,GAE1DrR,YAEF,MAAMyqB,yBAA2B,IAAIxsB,SACnCysB,2BACE,GAAIP,yBAA2B,KAAM,CACnCO,0BACF,KAAO,CACLN,gDACE/1E,KAAKs2E,2BACHR,yBACAS,YACE,GAAIA,YAAc,aAAc,CAC9BF,0BACF,IAGR,KAGJ,iBACQD,yBACN,GAAIxgB,KAAM,OACV,MAAMoH,eAAiBh9D,KAAKw2E,mBAAmB19B,WAC/C,GAAI8c,KAAM,OACV,GAAIoH,UAAY,KAAM,CACpB,MACF,CACA,MAAM7vC,QAACA,QAAOnvB,MAAEA,OAASg/D,SACzB,GAAIh/D,OAAS,KAAM,CACjB,MACF,CACA,GAAIA,OAAOoxC,IAAK,CACd0a,OAAO9rD,MAAMoxC,IACf,KAAO,CACL,OAAQuc,YACN,IAAK,YACL,IAAK,SACL,IAAK,eAAgB,CACnB,GAAI3tD,MAAMgwE,qBAAuB,YAAa,CAC5C,MACF,CACA,KACF,CACA,IAAK,YACL,IAAK,MACL,IAAK,OAAQ,CACX,GACEhwE,MAAMgwE,qBAAuB,aAC7BhwE,MAAMgwE,qBAAuB,YAC7B,CACA,MACF,CACA,KACF,CAEA,IAAK,YACL,IAAK,UAEPpY,KAAO,KACP/L,QAAQ,CACNqsB,OAAQlzB,kBAAkBmzB,UAC1BnZ,SAAU,CACR7vC,gBACAnvB,cAGN,CACD,EAhDD,EAiDD,CAAC,MAAOoxC,KACP0a,OAAO1a,IACT,KAEF,MAAMqnC,kBAAoBA,KACxB,GAAIV,gDAAiD,CACnDA,kDACAA,gDAAkD91E,SACpD,CACA,GAAI61E,yBAA2B,KAAM,CACnC91E,KAAK02E,wBAAwBZ,yBAC7BA,wBAA0B71E,SAC5B,GAEF,MAAO,CAACw2E,oCAAmBT,wCAC7B,CAEAtwB,4DAAmEiG,WACjEA,WACAypB,UAAUppB,YAACA,YAAW1I,qBAAEA,qBAAoBxK,UAAEA,aAK9C,IAAI8c,KAAgB,MACpB,MAAM+gB,cAAgB,IAAI/sB,SAEvBC,UACD,MAAM+sB,iBAAmBlxB,UACvB,IACE,MAAMqhB,kBAAoB/mE,KAAKmzE,eAAexnB,YAC9C,OAAOob,WACR,CAAC,MAAO8P,IACP,OAAQ,CACV,GAEF,WACE,IAAIC,yBAA2BF,mBAC/B,GAAIhhB,KAAM,OACV,MAAOkhB,oBAAsBxzB,qBAAsB,OAC3C6I,MAAM,KACZ,GAAIyJ,KAAM,OACVkhB,yBAA2BF,mBAC3B,GAAIhhB,KAAM,MACZ,CACA/L,QAAQ,CAACqsB,OAAQlzB,kBAAkB+zB,sBACpC,EAVD,EAUI,IAEN,MAAMN,kBAACA,kBAAiBT,oBAAEA,qBACxBh2E,KAAK61E,kCAAkC,CAAClqB,sBAAY7S,sBACtD,MAAMk+B,oBAAsBh3E,KAAK21E,uBAAuB3pB,aACxD,IAAIhuC,OACJ,IACE,MAAMi5D,cAAgBrtB,QAAQstB,KAAK,CACjCF,oBACAhB,oBACAW,gBAEF,GAAIM,QAAQf,SAAWlzB,kBAAkBmzB,UAAW,CAClDn4D,OAASi5D,QAAQja,QACnB,KAAO,CACL,MAAM,IAAInkB,2CAA2CC,UACvD,CACF,CAAU,QACR8c,KAAO,KACP6gB,mBACF,CACA,OAAOz4D,MACT,CAEA0nC,mDAA0DiG,WACxDA,WACAypB,UAAUppB,YACRA,YAAWrI,eACXA,eAAcsI,mBACdA,mBAAkBC,WAClBA,WAAUpT,UACVA,aAMF,IAAI8c,KAAgB,MACpB,MAAM+gB,cAAgB,IAAI/sB,SAGvBC,UACD,IAAIstB,kBAAwCjrB,WAC5C,IAAIkrB,gBAAiC,KACrC,MAAMC,qBAAuB3xB,UAC3B,IACE,MAAMv4B,QAACA,QAASnvB,MAAOgvD,oBAAsBhtD,KAAKs3E,mBAChDrrB,mBACA,CACEN,sBACAhI,gCAGJyzB,gBAAkBjqD,QAAQ6mC,KAC1B,OAAOhH,cAAc/d,KACtB,CAAC,MAAO9xC,GAGP,OAAOg6E,iBACT,GAEF,WACEA,wBAA0BE,uBAC1B,GAAIzhB,KAAM,OACV,MACE,KACA,CACA,GAAI1J,aAAeirB,kBAAmB,CACpCttB,QAAQ,CACNqsB,OAAQlzB,kBAAkBu0B,cAC1BC,2BAA4BJ,kBAE9B,MACF,OACMjrB,MAAM,KACZ,GAAIyJ,KAAM,OACVuhB,wBAA0BE,uBAC1B,GAAIzhB,KAAM,MACZ,CACD,EAlBD,EAkBI,IAEN,MAAM6gB,kBAACA,kBAAiBT,oBAAEA,qBACxBh2E,KAAK61E,kCAAkC,CAAClqB,sBAAY7S,sBACtD,MAAMk+B,oBAAsBh3E,KAAK21E,uBAAuB3pB,aACxD,IAAIhuC,OACJ,IACE,MAAMi5D,cAAgBrtB,QAAQstB,KAAK,CACjCF,oBACAhB,oBACAW,gBAEF,GAAIM,QAAQf,SAAWlzB,kBAAkBmzB,UAAW,CAClDn4D,OAASi5D,QAAQja,QACnB,KAAO,CAEL,IAAIya,gBAIJ,MACE,KACA,CACA,MAAM3rB,aAAe9rD,KAAKw2E,mBAAmB19B,WAC7C,GAAIgT,QAAU,KAAM,CAClB,KACF,CACA,GACEA,OAAO3+B,QAAQ6mC,MACdijB,QAAQO,4BAA8B7zB,gBACvC,OACMwI,MAAM,KACZ,QACF,CACAsrB,gBAAkB3rB,OAClB,KACF,CACA,GAAI2rB,iBAAiBz5E,MAAO,CAC1B,MAAM05E,oBAAsB/rB,YAAc,YAC1C,MAAMqiB,mBAACA,oBAAsByJ,gBAAgBz5E,MAC7C,OAAQ05E,qBACN,IAAK,YACL,IAAK,SACH,GACE1J,qBAAuB,aACvBA,qBAAuB,aACvBA,qBAAuB,YACvB,CACA,MAAM,IAAI90B,oCAAoCJ,UAChD,CACA,MACF,IAAK,YACL,IAAK,SACL,IAAK,eACH,GACEk1B,qBAAuB,aACvBA,qBAAuB,YACvB,CACA,MAAM,IAAI90B,oCAAoCJ,UAChD,CACA,MACF,IAAK,YACL,IAAK,MACL,IAAK,OACH,GAAIk1B,qBAAuB,YAAa,CACtC,MAAM,IAAI90B,oCAAoCJ,UAChD,CACA,MACF,QAGE,CAAE//B,IAAe,EAAjB,CAAmB2+D,qBAEvB15D,OAAS,CACPmP,QAASsqD,gBAAgBtqD,QACzBnvB,MAAO,CAACoxC,IAAKqoC,gBAAgBz5E,MAAMoxC,KAEvC,KAAO,CACL,MAAM,IAAI8J,oCAAoCJ,UAChD,CACF,CACF,CAAU,QACR8c,KAAO,KACP6gB,mBACF,CACA,OAAOz4D,MACT,CAEA0nC,oDAA2DiG,WACzDA,WAAU7S,UACVA,YAKA,IAAI6+B,UACJ,MAAMhB,cAAgB,IAAI/sB,SAGvBC,UACD,IAAI+tB,UAAY53E,KAAK2xE,mCAAqC,GAAK,IAC/D,OAAQhmB,YACN,IAAK,YACL,IAAK,SACL,IAAK,SACL,IAAK,YACL,IAAK,eAAgB,CACnBisB,UAAY53E,KAAK2xE,mCAAqC,GAAK,IAC3D,KACF,EAMFgG,UAAYtrB,YACV,IAAMxC,QAAQ,CAACqsB,OAAQlzB,kBAAkB60B,UAAWD,uBACpDA,UACD,IAEH,MAAMnB,kBAACA,kBAAiBT,oBAAEA,qBACxBh2E,KAAK61E,kCAAkC,CACrClqB,sBACA7S,sBAEJ,IAAI96B,OACJ,IACE,MAAMi5D,cAAgBrtB,QAAQstB,KAAK,CAAClB,oBAAqBW,gBACzD,GAAIM,QAAQf,SAAWlzB,kBAAkBmzB,UAAW,CAClDn4D,OAASi5D,QAAQja,QACnB,KAAO,CACL,MAAM,IAAIjkB,+BACRD,UACAm+B,QAAQW,UAAY,IAExB,CACF,CAAU,QACRjV,aAAagV,WACblB,mBACF,CACA,OAAOz4D,MACT,CAKA0nC,wBACE,MAAM6tB,gBAAkBvzE,KAAK8xE,YAAY,kBAAmB,IAC5D,MAAMzqE,IAAM+I,OAAOmjE,UAAW5N,cAAcxjE,MAAM6qE,qBAClD,GAAI,UAAW3lE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,8BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,sBAAsBiG,YACpB,MAAMluC,KAAOzd,KAAKqzE,WAAW,GAAI1nB,YACjC,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,kBAAmBr0D,MAC5D,MAAMpW,IAAM+I,OAAOmjE,UAAW5F,iBAC9B,GAAI,UAAWtmE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,8BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,cACEwf,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,GACA1nB,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,UAAWr0D,MACpD,MAAMpW,IAAM+I,OAAOmjE,UAAW5N,cAActnD,WAC5C,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,qBAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,oBACEwf,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,GACA1nB,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,gBAAiBr0D,MAC1D,MAAMpW,IAAM+I,OAAOmjE,UAAW5N,cAAc7jE,WAC5C,GAAI,UAAWuF,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,4BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAQA0nC,qBACEoyB,UACAzrE,OAEA,MAAMoR,KAAO,CAACq6D,UAAWzrE,OACzB,MAAMknE,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OAAOmjE,UAAW5N,cAAcxjE,MAAMwiE,uBAClD,GAAI,UAAWt9D,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,6BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,yBACE5M,UACA+N,QAEA,MAAM15B,QAACA,QAASnvB,MAAO+uC,cAAgB/sC,KAAK+3E,qBAC1C,CAACj/B,WACD+N,QAEFr2B,SAAOuc,OAAO7xC,SAAW,GACzB,MAAM8C,MAAQ+uC,OAAO,GACrB,MAAO,CAAC5f,gBAASnvB,YACnB,CAKA0nD,2BACEtC,WACAyD,QAEA,MAAMwL,OAAgB,CAACjP,YACvB,GAAIyD,OAAQ,CACVwL,OAAO/1D,KAAKuqD,OACd,CACA,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,uBAAwBzf,QACjE,MAAMhrD,IAAM+I,OAAOmjE,UAAWtF,+BAC9B,GAAI,UAAW5mE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,iCAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,0BACEwf,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,GACA1nB,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,sBAAuBr0D,MAChE,MAAMpW,IAAM+I,OAAOmjE,UAAW5N,cAActnD,WAC5C,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,kCAEJ,CACA,OAAO+H,IAAI2W,MACb,CAOA0nC,qBAAqBiG,YACnB,MAAM3tC,aAAehe,KAAKg4E,UAAU,CAClCrsB,sBACAssB,kCAAmC,OAErC,OAAOj6D,OAAOhgB,MAAMw0B,KACtB,CAKAkzB,2BACEiG,YAEA,MAAMluC,KAAOzd,KAAKqzE,WAAW,GAAI1nB,YACjC,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,uBAAwBr0D,MACjE,MAAMpW,IAAM+I,OAAOmjE,UAAWxJ,+BAC9B,GAAI,UAAW1iE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,0BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,yBACEzI,UACA+gB,MACAkH,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,CAACp2B,UAAU3mC,KAAIi5B,QAAUA,OAAOd,cAChCkd,WACA1rD,UACA,IACK4mD,OACHmX,MAAOA,OAAS,KAAOA,MAAQnX,QAAQmX,QAG3C,MAAMuV,gBAAkBvzE,KAAK8xE,YAAY,qBAAsBr0D,MAC/D,MAAMpW,IAAM+I,OAAOmjE,UAAWnN,0BAC9B,GAAI,UAAW/+D,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,iCAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,yBACE,MAAM6tB,gBAAkBvzE,KAAK8xE,YAAY,mBAAoB,IAC7D,MAAMzqE,IAAM+I,OAAOmjE,UAAWvJ,2BAC9B,GAAI,UAAW3iE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,+BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,mBACEwf,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,GACA1nB,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,eAAgBr0D,MACzD,MAAMpW,IAAM+I,OAAOmjE,UAAWrJ,uBAC9B,GAAI,UAAW7iE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,2BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,yBACE,MAAM6tB,gBAAkBvzE,KAAK8xE,YAAY,mBAAoB,IAC7D,MAAMzqE,IAAM+I,OAAOmjE,UAAWpJ,2BAC9B,GAAI,UAAW9iE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,+BAC1C,CACA,MAAM44E,cAAgB7wE,IAAI2W,OAC1B,OAAO,IAAIw/C,cACT0a,cAAcza,cACdya,cAAcxa,yBACdwa,cAAcva,OACdua,cAActa,iBACdsa,cAAcra,gBAElB,CAMAnY,0BACE,MAAM6tB,gBAAkBvzE,KAAK8xE,YAAY,oBAAqB,IAC9D,MAAMzqE,IAAM+I,OAAOmjE,UAAWnJ,4BAC9B,GAAI,UAAW/iE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,gCAC1C,CACA,OAAO+H,IAAI2W,MACb,CAMA0nC,wCACE7F,WACA8L,YAEA,MAAMluC,KAAOzd,KAAKqzE,WAAW,CAACxzB,YAAa8L,YAC3C,MAAM4nB,gBAAkBvzE,KAAK8xE,YAC3B,oCACAr0D,MAEF,MAAMpW,IAAM+I,OAAOmjE,UAAWrF,4CAC9B,GAAI,UAAW7mE,IAAK,CAClBhI,QAAQ8kD,KAAK,sDACb,OAAO,CACT,CACA,OAAO98C,IAAI2W,MACb,CAQA0nC,mCAAmCiG,YAMjC,MAAMx+B,QACJA,QACAnvB,OAAO4lD,UAACA,kBACA5jD,KAAKm4E,6BAA6BxsB,YAC5C,MAAMoB,cAAgB,CAChBqkB,2BACF,MAAM,IAAI91E,MACR,wFACE,sFACA,uBAEL,EACD6L,SACE,MAAO,CAAE,CACX,GAEF,MAAO,CACLgmB,gBACAnvB,MAAO,CACL4lD,oBACAmJ,6BAGN,CAMArH,kCACEr5C,OAEA,MAAMknE,gBAAkBvzE,KAAK8xE,YAC3B,8BACAzlE,MAAQ,CAACA,OAAS,IAEpB,MAAMhF,IAAM+I,OAAOmjE,UAAWrC,sCAC9B,GAAI,UAAW7pE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,2CAEJ,CAEA,OAAO+H,IAAI2W,MACb,CAOA0nC,mCACE9B,UACA+H,YAEA,MAAMluC,KAAOzd,KAAKqzE,WAAW,CAACzvB,WAAY+H,YAC1C,MAAM4nB,gBAAkBvzE,KAAK8xE,YAC3B,+BACAr0D,MAGF,MAAMpW,IAAM+I,OAAOmjE,UAAWpC,2BAC9B,GAAI,UAAW9pE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,+BAC1C,CACA,MAAM6tB,QAACA,QAAOnvB,MAAEA,OAASqJ,IAAI2W,OAC7B,MAAO,CACLmP,gBACAnvB,MAAOA,QAAU,KAAOA,MAAM+uD,cAAgB,KAElD,CAKArH,uBACEr3C,QACAs9C,YAEA,MAAMysB,YAAc9nD,SAASjiB,QAAQk7B,aAAa5mC,SAAS,UAC3D,MAAM8a,KAAOzd,KAAKqzE,WAAW,CAAC+E,aAAczsB,YAC5C,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,mBAAoBr0D,MAE7D,MAAMpW,IAAM+I,OAAOmjE,UAAW3N,wBAAwB1O,SAAS74C,YAC/D,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,gCAC1C,CACA,GAAI+H,IAAI2W,SAAW,KAAM,CACvB,MAAM,IAAI1iB,MAAM,oBAClB,CACA,OAAO+L,IAAI2W,MACb,CAKA0nC,kCACEmB,QAEA,MAAMvI,SAAWuI,QAAQwxB,wBAAwB/hE,KAAI0M,KAAOA,IAAIyrB,aAChE,MAAMhxB,KAAO6gC,UAAUpjD,OAAS,CAACojD,UAAY,GAC7C,MAAMi1B,gBAAkBvzE,KAAK8xE,YAC3B,8BACAr0D,MAEF,MAAMpW,IAAM+I,OAAOmjE,UAAWtJ,sCAC9B,GAAI,UAAW5iE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,2CAEJ,CACA,OAAO+H,IAAI2W,MACb,CAOA0nC,yBACEiG,YAEA,IACE,MAAMtkD,UAAYrH,KAAKs4E,6BAA6B3sB,YACpD,OAAOtkD,IAAIrJ,KACZ,CAAC,MAAOb,GACP,MAAM,IAAI7B,MAAM,mCAAqC6B,EACvD,CACF,CAMAuoD,yBACEwf,oBAEA,IACE,MAAM79D,UAAYrH,KAAKm4E,6BAA6BjT,oBACpD,OAAO79D,IAAIrJ,KACZ,CAAC,MAAOb,GACP,MAAM,IAAI7B,MAAM,mCAAqC6B,EACvD,CACF,CAMAuoD,mCACEwf,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,GACA1nB,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,qBAAsBr0D,MAC/D,MAAMpW,IAAM+I,OAAOmjE,UAAW3C,6BAC9B,GAAI,UAAWvpE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,iCAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,uBACE9B,UACAkxB,WAEA,MAAMnpB,WAACA,WAAU9E,OAAEA,QAAUoe,4BAA4B6P,WACzD,MAAMr3D,KAAOzd,KAAKqzE,WAChB,CAACzvB,WACD+H,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,mBAAoBr0D,MAC7D,MAAMpW,IAAM+I,OAAOmjE,UAAW1C,2BAC9B,GAAI,UAAWxpE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,yCAA2CskD,UAAY,YAE3D,CACA,OAAOv8C,IAAI2W,MACb,CAKA0nC,mBACE,MAAM6tB,gBAAkBvzE,KAAK8xE,YAAY,aAAc,IACvD,MAAMzqE,IAAM+I,OAAOmjE,UAAW5N,cAAc2B,gBAC5C,GAAI,UAAWjgE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,wBAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,uBACE,MAAM6tB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkB,IAC3D,MAAMzqE,IAAM+I,OAAOmjE,UAAW5N,cAAc7jE,WAC5C,GAAI,UAAWuF,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,6BAC1C,CACA,OAAO+H,IAAI2W,MACb,CA0DA0nC,eACEsO,KACA8gB,WAOA,MAAMnpB,WAACA,WAAU9E,OAAEA,QAAUoe,4BAA4B6P,WACzD,MAAMr3D,KAAOzd,KAAKu4E,2BAChB,CAACvkB,MACDrI,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,WAAYr0D,MACrD,IACE,OAAQopC,QAAQ2xB,oBACd,IAAK,WAAY,CACf,MAAMnxE,IAAM+I,OAAOmjE,UAAWnD,+BAC9B,GAAI,UAAW/oE,IAAK,CAClB,MAAMA,IAAI/H,KACZ,CACA,OAAO+H,IAAI2W,MACb,CACA,IAAK,OAAQ,CACX,MAAM3W,IAAM+I,OAAOmjE,UAAWpD,2BAC9B,GAAI,UAAW9oE,IAAK,CAClB,MAAMA,IAAI/H,KACZ,CACA,OAAO+H,IAAI2W,MACb,CACA,QAAS,CACP,MAAM3W,IAAM+I,OAAOmjE,UAAWxD,mBAC9B,GAAI,UAAW1oE,IAAK,CAClB,MAAMA,IAAI/H,KACZ,CACA,MAAM0e,OAACA,QAAU3W,IACjB,OAAO2W,OACH,IACKA,OACHu1C,aAAcv1C,OAAOu1C,aAAaj9C,KAChC,EAAE6pC,wBAAahG,UAAMiE,oBAAc,CACjCjE,UACAgG,YAAa,IACRA,YACH9xC,QAASy3D,6BACP1nB,QACA+B,YAAY9xC,UAGhB+vC,qBAIN,IACN,EAEH,CAAC,MAAOjhD,GACP,MAAM,IAAIkuD,mBACRluD,EACA,gCAEJ,CACF,CAsBAuoD,qBACEsO,KACA8gB,WAOA,MAAMnpB,WAACA,WAAU9E,OAAEA,QAAUoe,4BAA4B6P,WACzD,MAAMr3D,KAAOzd,KAAKu4E,2BAChB,CAACvkB,MACDrI,WACA,aACA9E,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,WAAYr0D,MACrD,IACE,OAAQopC,QAAQ2xB,oBACd,IAAK,WAAY,CACf,MAAMnxE,IAAM+I,OAAOmjE,UAAWjD,qCAC9B,GAAI,UAAWjpE,IAAK,CAClB,MAAMA,IAAI/H,KACZ,CACA,OAAO+H,IAAI2W,MACb,CACA,IAAK,OAAQ,CACX,MAAM3W,IAAM+I,OAAOmjE,UAAWhD,iCAC9B,GAAI,UAAWlpE,IAAK,CAClB,MAAMA,IAAI/H,KACZ,CACA,OAAO+H,IAAI2W,MACb,CACA,QAAS,CACP,MAAM3W,IAAM+I,OAAOmjE,UAAWlD,yBAC9B,GAAI,UAAWhpE,IAAK,CAClB,MAAMA,IAAI/H,KACZ,CACA,OAAO+H,IAAI2W,MACb,EAEH,CAAC,MAAO7gB,GACP,MAAM,IAAIkuD,mBAAmBluD,EAAmB,sBAClD,CACF,CA2CAuoD,yBACEsvB,oBAEA,IAAIyD,MACJ,IAAI9sB,WAEJ,UAAWqpB,qBAAuB,SAAU,CAC1CrpB,WAAaqpB,kBACd,MAAM,GAAIA,mBAAoB,CAC7B,MAAOrpB,WAAY1tD,KAAMm3D,MAAQ4f,mBACjCrpB,WAAa1tD,EACbw6E,MAAQrjB,IACV,CAEA,MAAM33C,KAAOzd,KAAKqzE,WAAW,GAAI1nB,WAAY,SAAU8sB,OACvD,MAAMlF,gBAAkBvzE,KAAK8xE,YAAY,qBAAsBr0D,MAC/D,MAAMpW,IAAM+I,OAAOmjE,UAAWzL,+BAC9B,GAAI,UAAWzgE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,6CAEJ,CAEA,OAAO+H,IAAI2W,MACb,CA2BA0nC,qBACE5M,UACAg8B,WAEA,MAAMnpB,WAACA,WAAU9E,OAAEA,QAAUoe,4BAA4B6P,WACzD,MAAMr3D,KAAOzd,KAAKu4E,2BAChB,CAACz/B,WACD6S,WACA1rD,UACA4mD,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OAAOmjE,UAAW7C,yBAC9B,GAAI,UAAWrpE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,4BAC1C,CAEA,MAAM0e,OAAS3W,IAAI2W,OACnB,IAAKA,OAAQ,OAAOA,OAEpB,MAAO,IACFA,OACHmiC,YAAa,IACRniC,OAAOmiC,YACV9xC,QAASy3D,6BACP9nD,OAAOogC,QACPpgC,OAAOmiC,YAAY9xC,UAI3B,CAKAq3C,2BACE5M,UACAosB,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKu4E,2BAChB,CAACz/B,WACD6S,WACA,aACA9E,QAEF,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OAAOmjE,UAAW5C,+BAC9B,GAAI,UAAWtpE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,4BAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,4BACEtC,WACA8hB,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAM2E,MAAQzmB,WAAW9sC,KAAIwiC,YAC3B,MAAMr7B,KAAOzd,KAAKu4E,2BAChB,CAACz/B,WACD6S,WACA,aACA9E,QAEF,MAAO,CACLijB,WAAY,iBACZrsD,UACD,IAGH,MAAM81D,gBAAkBvzE,KAAK+xE,iBAAiBlI,OAC9C,MAAMxiE,IAAMksE,UAAUj9D,KAAKi9D,YACzB,MAAMlsE,IAAM+I,OAAOmjE,UAAW5C,+BAC9B,GAAI,UAAWtpE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,6BAC1C,CACA,OAAO+H,IAAI2W,MAAM,IAGnB,OAAO3W,GACT,CAgCAq+C,sBACEtC,WACA8hB,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAM2E,MAAQzmB,WAAW9sC,KAAIwiC,YAC3B,MAAMr7B,KAAOzd,KAAKu4E,2BAChB,CAACz/B,WACD6S,WACA1rD,UACA4mD,QAEF,MAAO,CACLijB,WAAY,iBACZrsD,UACD,IAGH,MAAM81D,gBAAkBvzE,KAAK+xE,iBAAiBlI,OAC9C,MAAMxiE,IAAMksE,UAAUj9D,KAAKi9D,YACzB,MAAMlsE,IAAM+I,OAAOmjE,UAAW7C,yBAC9B,GAAI,UAAWrpE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,6BAC1C,CACA,MAAM0e,OAAS3W,IAAI2W,OACnB,IAAKA,OAAQ,OAAOA,OAEpB,MAAO,IACFA,OACHmiC,YAAa,IACRniC,OAAOmiC,YACV9xC,QAASy3D,6BACP9nD,OAAOogC,QACPpgC,OAAOmiC,YAAY9xC,UAGxB,IAGH,OAAOhH,GACT,CAQAq+C,wBACEsO,KACArI,YAEA,MAAMluC,KAAOzd,KAAKu4E,2BAA2B,CAACvkB,MAAOrI,YACrD,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,WAAYr0D,MACrD,MAAMpW,IAAM+I,OAAOmjE,UAAW/C,4BAE9B,GAAI,UAAWnpE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,gCAC1C,CAEA,MAAM0e,OAAS3W,IAAI2W,OACnB,IAAKA,OAAQ,CACX,MAAM,IAAI1iB,MAAM,mBAAqB04D,KAAO,aAC9C,CAEA,MAAM0kB,MAAQ,IACT16D,OACHu1C,aAAcv1C,OAAOu1C,aAAaj9C,KAAI,EAAE6pC,wBAAahG,cACnD,MAAM9rC,QAAU,IAAI0vC,QAAQoC,YAAY9xC,SACxC,MAAO,CACL8rC,UACAgG,YAAa,IACRA,YACH9xC,iBAEH,KAIL,MAAO,IACFqqE,MACHnlB,aAAcmlB,MAAMnlB,aAAaj9C,KAAI,EAAE6pC,wBAAahG,cAC3C,CACLA,UACAgG,YAAagD,YAAYkE,SACvBlH,YAAY9xC,QACZ8xC,YAAYiD,gBAKtB,CAKAsC,gBACEoyB,UACAa,QACAhtB,YAEA,MAAMluC,KAAOzd,KAAKu4E,2BAChBI,UAAY14E,UAAY,CAAC63E,UAAWa,SAAW,CAACb,WAChDnsB,YAEF,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,YAAar0D,MACtD,MAAMpW,IAAM+I,OAAOmjE,UAAW5N,cAAcxjE,MAAMkc,YAClD,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,uBAC1C,CACA,OAAO+H,IAAI2W,MACb,CAKA0nC,yBACEsO,KACArI,YAEA,MAAMluC,KAAOzd,KAAKu4E,2BAChB,CAACvkB,MACDrI,WACA1rD,UACA,CACEu4E,mBAAoB,aACpBtI,QAAS,QAGb,MAAMqD,gBAAkBvzE,KAAK8xE,YAAY,WAAYr0D,MACrD,MAAMpW,IAAM+I,OAAOmjE,UAAW9C,6BAC9B,GAAI,UAAWppE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,sBAC1C,CACA,MAAM0e,OAAS3W,IAAI2W,OACnB,IAAKA,OAAQ,CACX,MAAM,IAAI1iB,MAAM,SAAW04D,KAAO,aACpC,CACA,OAAOh2C,MACT,CAOA0nC,kCACEsO,KACArI,YAEA,MAAMluC,KAAOzd,KAAKu4E,2BAChB,CAACvkB,MACDrI,WACA1rD,UACA,CACEu4E,mBAAoB,aACpBtI,QAAS,QAGb,MAAMqD,gBAAkBvzE,KAAK8xE,YAAY,WAAYr0D,MACrD,MAAMpW,IAAM+I,OAAOmjE,UAAW9C,6BAC9B,GAAI,UAAWppE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,gCAC1C,CACA,MAAM0e,OAAS3W,IAAI2W,OACnB,IAAKA,OAAQ,CACX,MAAM,IAAI1iB,MAAM,mBAAqB04D,KAAO,aAC9C,CACA,OAAOh2C,MACT,CAOA0nC,8BACE5M,UACA6S,YAEA,MAAMluC,KAAOzd,KAAKu4E,2BAA2B,CAACz/B,WAAY6S,YAC1D,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OAAOmjE,UAAW7C,yBAC9B,GAAI,UAAWrpE,IAAK,CAClB,MAAM,IAAIgkD,mBAAmBhkD,IAAI/H,MAAO,4BAC1C,CAEA,MAAM0e,OAAS3W,IAAI2W,OACnB,IAAKA,OAAQ,OAAOA,OAEpB,MAAM3P,QAAU,IAAI0vC,QAAQ//B,OAAOmiC,YAAY9xC,SAC/C,MAAM+0C,WAAaplC,OAAOmiC,YAAYiD,WACtC,MAAO,IACFplC,OACHmiC,YAAagD,YAAYkE,SAASh5C,QAAS+0C,YAE/C,CAOAsC,oCACE5M,UACA6S,YAEA,MAAMluC,KAAOzd,KAAKu4E,2BAChB,CAACz/B,WACD6S,WACA,cAEF,MAAM4nB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkBr0D,MAC3D,MAAMpW,IAAM+I,OAAOmjE,UAAW5C,+BAC9B,GAAI,UAAWtpE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,sCAEJ,CACA,OAAO+H,IAAI2W,MACb,CAOA0nC,qCACEtC,WACAuI,YAEA,MAAMke,MAAQzmB,WAAW9sC,KAAIwiC,YAC3B,MAAMr7B,KAAOzd,KAAKu4E,2BAChB,CAACz/B,WACD6S,WACA,cAEF,MAAO,CACLme,WAAY,iBACZrsD,UACD,IAGH,MAAM81D,gBAAkBvzE,KAAK+xE,iBAAiBlI,OAC9C,MAAMxiE,IAAMksE,UAAUj9D,KAAKi9D,YACzB,MAAMlsE,IAAM+I,OAAOmjE,UAAW5C,+BAC9B,GAAI,UAAWtpE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,uCAEJ,CACA,OAAO+H,IAAI2W,MAAM,IAGnB,OAAO3W,GACT,CAYAq+C,uCACExW,QACA4oC,UACAa,SAEA,IAAIprD,QAAe,CAAE,EAErB,IAAIqrD,0BAA4B54E,KAAK64E,yBACrC,QAAS,UAAWtrD,SAAU,CAC5BuqD,YACA,GAAIA,WAAa,GAAKA,UAAYc,oBAAqB,CACrD,KACF,CAEA,IACE,MAAMF,YAAc14E,KAAK84E,4BACvBhB,UACA,aAEF,GAAIY,MAAMt1B,WAAWloD,OAAS,EAAG,CAC/BqyB,QAAQwrD,MACNL,MAAMt1B,WAAWs1B,MAAMt1B,WAAWloD,OAAS,GAAGyH,UAClD,CACD,CAAC,MAAOysC,KACP,GAAIA,eAAe9zC,OAAS8zC,IAAI/gC,QAAQlI,SAAS,WAAY,CAC3D,QACF,KAAO,CACL,MAAMipC,GACR,CACF,CACF,CAEA,IAAI4pC,2BAA6Bh5E,KAAK+zD,QAAQ,aAC9C,QAAS,WAAYxmC,SAAU,CAC7BorD,UACA,GAAIA,QAAUK,qBAAsB,CAClC,KACF,CAEA,IACE,MAAMN,YAAc14E,KAAK84E,4BAA4BH,SACrD,GAAID,MAAMt1B,WAAWloD,OAAS,EAAG,CAC/BqyB,QAAQ0rD,OACNP,MAAMt1B,WAAWs1B,MAAMt1B,WAAWloD,OAAS,GAAGyH,UAClD,CACD,CAAC,MAAOysC,KACP,GAAIA,eAAe9zC,OAAS8zC,IAAI/gC,QAAQlI,SAAS,WAAY,CAC3D,QACF,KAAO,CACL,MAAMipC,GACR,CACF,CACF,CAEA,MAAM8pC,6BAA+Bl5E,KAAKm5E,kCACxCjqC,QACA3hB,SAEF,OAAO2rD,uBAAuB5iE,KAAIqyD,MAAQA,KAAK7vB,WACjD,CAQA4M,wCACExW,QACA3hB,QACAo+B,YAEA,MAAMluC,KAAOzd,KAAKu4E,2BAChB,CAACrpC,QAAQT,YACTkd,WACA1rD,UACAstB,SAEF,MAAMgmD,gBAAkBvzE,KAAK8xE,YAC3B,oCACAr0D,MAEF,MAAMpW,IAAM+I,OAAOmjE,UAAW5H,4CAC9B,GAAI,UAAWtkE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,iDAEJ,CACA,OAAO+H,IAAI2W,MACb,CAUA0nC,8BACExW,QACA3hB,QACAo+B,YAEA,MAAMluC,KAAOzd,KAAKu4E,2BAChB,CAACrpC,QAAQT,YACTkd,WACA1rD,UACAstB,SAEF,MAAMgmD,gBAAkBvzE,KAAK8xE,YAAY,0BAA2Br0D,MACpE,MAAMpW,IAAM+I,OAAOmjE,UAAWzH,kCAC9B,GAAI,UAAWzkE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,uCAEJ,CACA,OAAO+H,IAAI2W,MACb,CAEA0nC,4BACEtI,WACAyJ,QAEA,MAAM15B,QAACA,QAASnvB,MAAOo7E,mBAAqBp5E,KAAK40E,yBAC/Cx3B,WACAyJ,QAGF,IAAI7oD,MAAQ,KACZ,GAAIo7E,cAAgB,KAAM,CACxBp7E,MAAQ,IAAIolE,0BAA0B,CACpCpgD,IAAKo6B,WACL1pC,MAAO0vD,0BAA0B95B,YAAY8vC,YAAY12E,OAE7D,CAEA,MAAO,CACLyqB,gBACAnvB,YAEJ,CAKA0nD,yBACEsH,aACAkY,oBAEA,MAAM/3C,QAACA,QAASnvB,MAAOo7E,mBAAqBp5E,KAAK40E,yBAC/C5nB,aACAkY,oBAGF,IAAIlnE,MAAQ,KACZ,GAAIo7E,cAAgB,KAAM,CACxBp7E,MAAQ6uD,aAAawsB,gBAAgBD,YAAY12E,KACnD,CAEA,MAAO,CACLyqB,gBACAnvB,YAEJ,CAKA0nD,eACEsH,aACAkY,oBAEA,aAAallE,KAAKs3E,mBAAmBtqB,aAAckY,oBAChDlb,MAAKjnD,GAAKA,EAAE/E,QACZmsD,OAAMhtD,IACL,MAAM,IAAI7B,MACR,mCACE0xD,aAAave,WACb,KACAtxC,EACH,GAEP,CAgBAuoD,qBACE9xC,GACAk9C,UAEA,MAAMyiB,gBAAkBvzE,KAAK8xE,YAAY,iBAAkB,CACzDl+D,GAAG66B,WACHqiB,WAEF,MAAMzpD,IAAM+I,OAAOmjE,UAAWlC,yBAC9B,GAAI,UAAWhqE,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,cAAcsU,GAAG66B,oBAErB,CACA,OAAOpnC,IAAI2W,MACb,CAKA0nC,sCACE4zB,cAEA,IAAKA,aAAc,CAEjB,MAAOt5E,KAAKsyE,kBAAmB,OACvBnmB,MAAM,IACd,CACA,MAAMotB,eAAiB3gB,KAAKC,MAAQ74D,KAAKuyE,eAAeE,UACxD,MAAM+G,QAAUD,gBAAkBzU,2BAClC,GAAI9kE,KAAKuyE,eAAeC,kBAAoB,OAASgH,QAAS,CAC5D,OAAOx5E,KAAKuyE,eAAeC,eAC7B,CACF,CAEA,aAAaxyE,KAAKy5E,mBACpB,CAKA/zB,0BACE1lD,KAAKsyE,kBAAoB,KACzB,IACE,MAAMoH,UAAY9gB,KAAKC,MACvB,MAAM8gB,sBAAwB35E,KAAKuyE,eAAeC,gBAClD,MAAMoH,gBAAkBD,sBACpBA,sBAAsB/1B,UACtB,KACJ,IAAK,IAAI5oD,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMw3E,sBAAwBxyE,KAAK65E,mBAAmB,aAEtD,GAAID,kBAAoBpH,gBAAgB5uB,UAAW,CACjD5jD,KAAKuyE,eAAiB,CACpBC,gCACAC,UAAW7Z,KAAKC,MAChB6Z,sBAAuB,GACvBC,oBAAqB,IAEvB,OAAOH,eACT,OAGMrmB,MAAM1D,YAAc,EAC5B,CAEA,MAAM,IAAIntD,MACR,0CAA0Cs9D,KAAKC,MAAQ6gB,cAE3D,CAAU,QACR15E,KAAKsyE,kBAAoB,KAC3B,CACF,CAKA5sB,gCACEmB,QAEA,MAAM8E,WAACA,WAAY9E,OAAQytB,WAAarP,4BAA4Bpe,QACpE,MAAMppC,KAAOzd,KAAKqzE,WAAW,GAAI1nB,WAAY,SAAU2oB,WACvD,MAAMf,gBAAkBvzE,KAAK8xE,YAAY,4BAA6Br0D,MACtE,MAAMpW,IAAM+I,OAAOmjE,UAAW3N,wBAAwBvnD,WACtD,GAAI,UAAWhX,IAAK,CAClB,MAAM,IAAIgkD,mBACRhkD,IAAI/H,MACJ,yCAEJ,CACA,OAAO+H,IAAI2W,MACb,CA2BA0nC,0BACEo0B,qBACAC,gBACAC,iBAEA,GAAI,YAAaF,qBAAsB,CACrC,MAAMG,YAAcH,qBACpB,MAAM3yB,gBAAkB8yB,YAAY1wC,YACpC,MAAM2wC,mBACJp7E,cAAAA,OAAO4B,KAAKymD,iBAAiBxkD,SAAS,UACxC,GAAI7H,MAAM2H,QAAQs3E,kBAAoBC,kBAAoB/5E,UAAW,CACnE,MAAM,IAAI3E,MAAM,oBAClB,CAEA,MAAMurD,OAAckzB,iBAAmB,CAAE,EACzClzB,OAAOllD,SAAW,SAClB,KAAM,eAAgBklD,QAAS,CAC7BA,OAAO8E,WAAa3rD,KAAK2rD,UAC3B,CAEA,GACEouB,wBACOA,kBAAoB,UAC3B,sBAAuBA,gBACvB,CACAlzB,OAAOghB,kBAAoBkS,gBAAgBlS,iBAC7C,CAEA,MAAMpqD,KAAO,CAACy8D,mBAAoBrzB,QAClC,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,sBAAuBr0D,MAChE,MAAMpW,IAAM+I,OAAOmjE,UAAW9L,oCAC9B,GAAI,UAAWpgE,IAAK,CAClB,MAAM,IAAI/L,MAAM,mCAAqC+L,IAAI/H,MAAM+O,QACjE,CACA,OAAOhH,IAAI2W,MACb,CAEA,IAAImiC,YACJ,GAAI25B,gCAAgC32B,YAAa,CAC/C,IAAIg3B,WAA0BL,qBAC9B35B,YAAc,IAAIgD,YAClBhD,YAAYkD,SAAW82B,WAAW92B,SAClClD,YAAYxG,aAAemgC,qBAAqBngC,aAChDwG,YAAYoD,UAAY42B,WAAW52B,UACnCpD,YAAYiD,WAAa+2B,WAAW/2B,UACtC,KAAO,CACLjD,YAAcgD,YAAYkE,SAASyyB,sBAEnC35B,YAAYsD,SAAWtD,YAAYuD,MAAQzjD,SAC7C,CAEA,GAAI85E,kBAAoB95E,YAAcnF,MAAM2H,QAAQs3E,iBAAkB,CACpE,MAAM,IAAIz+E,MAAM,oBAClB,CAEA,MAAMwoD,QAAUi2B,gBAChB,GAAI55B,YAAYoD,WAAaO,QAAS,CACpC3D,YAAY7yB,QAAQw2B,QACtB,KAAO,CACL,IAAIw1B,aAAet5E,KAAKqyE,yBACxB,OAAS,CACP,MAAMG,sBACExyE,KAAKo6E,gCAAgCd,cAC7Cn5B,YAAYmD,qBAAuBkvB,gBAAgBlvB,qBACnDnD,YAAYlC,gBAAkBu0B,gBAAgB5uB,UAE9C,IAAKE,QAAS,MAEd3D,YAAY7yB,QAAQw2B,SACpB,IAAK3D,YAAYrH,UAAW,CAC1B,MAAM,IAAIx9C,MAAM,aAClB,CAEA,MAAMw9C,UAAYqH,YAAYrH,UAAUn2C,SAAS,UACjD,IACG3C,KAAKuyE,eAAeI,oBAAoBxsE,SAAS2yC,aACjD94C,KAAKuyE,eAAeG,sBAAsBvsE,SAAS2yC,WACpD,CAGA94C,KAAKuyE,eAAeI,oBAAoBr2E,KAAKw8C,WAC7C,KACF,KAAO,CAKLwgC,aAAe,IACjB,CACF,CACF,CAEA,MAAMjrE,QAAU8xC,YAAYkF,WAC5B,MAAMjF,SAAW/xC,QAAQk7B,YACzB,MAAM4d,gBAAkBhH,YAAY6G,WAAW5G,UAC/C,MAAM85B,mBAAqB/yB,gBAAgBxkD,SAAS,UACpD,MAAMkkD,OAAc,CAClBllD,SAAU,SACVgqD,WAAY3rD,KAAK2rD,YAGnB,GAAIquB,gBAAiB,CACnB,MAAM/8B,WACJniD,MAAM2H,QAAQu3E,iBACVA,gBACA3rE,QAAQixC,iBACZhpC,KAAI0M,KAAOA,IAAIyrB,aAEjBoY,OAAO,YAAc,CACnBllD,SAAU,SACVs7C,oBAEJ,CAEA,GAAI6G,QAAS,CACX+C,OAAOwzB,UAAY,IACrB,CAEA,GACEN,wBACOA,kBAAoB,UAC3B,sBAAuBA,gBACvB,CACAlzB,OAAOghB,kBAAoBkS,gBAAgBlS,iBAC7C,CAEA,MAAMpqD,KAAO,CAACy8D,mBAAoBrzB,QAClC,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,sBAAuBr0D,MAChE,MAAMpW,IAAM+I,OAAOmjE,UAAW9L,oCAC9B,GAAI,UAAWpgE,IAAK,CAClB,IAAIiiD,KACJ,GAAI,SAAUjiD,IAAI/H,MAAO,CACvBgqD,KAAOjiD,IAAI/H,MAAMoD,KAAK4mD,KACtB,GAAIA,MAAQxuD,MAAM2H,QAAQ6mD,MAAO,CAC/B,MAAMgxB,YAAc,SACpB,MAAMC,SAAWD,YAAchxB,KAAK/sD,KAAK+9E,aACzCj7E,QAAQC,MAAM+H,IAAI/H,MAAM+O,QAASksE,SACnC,CACF,CAEA,MAAM,IAAIpxB,qBAAqB,CAC7BC,OAAQ,WACRtQ,UAAW,GACXuQ,mBAAoBhiD,IAAI/H,MAAM+O,QAC9Bi7C,KAAMA,MAEV,CACA,OAAOjiD,IAAI2W,MACb,CA2BA0nC,sBACEvF,YACAq6B,iBACAjtD,SAEA,GAAI,YAAa4yB,YAAa,CAC5B,GAAIq6B,kBAAoB1/E,MAAM2H,QAAQ+3E,kBAAmB,CACvD,MAAM,IAAIl/E,MAAM,oBAClB,CAEA,MAAM6rD,gBAAkBhH,YAAY5W,YACpC,aAAavpC,KAAKy6E,mBAAmBtzB,gBAAiBqzB,iBACxD,CAEA,GAAIA,mBAAqBv6E,YAAcnF,MAAM2H,QAAQ+3E,kBAAmB,CACtE,MAAM,IAAIl/E,MAAM,oBAClB,CAEA,MAAMwoD,QAAU02B,iBAChB,GAAIr6B,YAAYoD,UAAW,CACzBpD,YAAY7yB,QAAQw2B,QACtB,KAAO,CACL,IAAIw1B,aAAet5E,KAAKqyE,yBACxB,OAAS,CACP,MAAMG,sBACExyE,KAAKo6E,gCAAgCd,cAC7Cn5B,YAAYmD,qBAAuBkvB,gBAAgBlvB,qBACnDnD,YAAYlC,gBAAkBu0B,gBAAgB5uB,UAC9CzD,YAAY7yB,QAAQw2B,SACpB,IAAK3D,YAAYrH,UAAW,CAC1B,MAAM,IAAIx9C,MAAM,aAClB,CAEA,MAAMw9C,UAAYqH,YAAYrH,UAAUn2C,SAAS,UACjD,IAAK3C,KAAKuyE,eAAeG,sBAAsBvsE,SAAS2yC,WAAY,CAGlE94C,KAAKuyE,eAAeG,sBAAsBp2E,KAAKw8C,WAC/C,KACF,KAAO,CAKLwgC,aAAe,IACjB,CACF,CACF,CAEA,MAAMnyB,gBAAkBhH,YAAY5W,YACpC,aAAavpC,KAAKy6E,mBAAmBtzB,gBAAiB55B,QACxD,CAMAm4B,yBACEg1B,eACAntD,SAEA,MAAM2sD,mBAAqB5pD,SAASoqD,gBAAgB/3E,SAAS,UAC7D,MAAMqb,aAAehe,KAAK26E,uBACxBT,mBACA3sD,SAEF,OAAOvP,MACT,CAMA0nC,6BACEw0B,mBACA3sD,SAEA,MAAMs5B,OAAc,CAACllD,SAAU,UAC/B,MAAM8pD,cAAgBl+B,SAAWA,QAAQk+B,cACzC,MAAMC,oBACJD,gBAAkB,KACd,YACCl+B,SAAWA,QAAQm+B,qBAAwB1rD,KAAK2rD,WAEvD,GAAIp+B,SAAWA,QAAQq+B,YAAc,KAAM,CACzC/E,OAAO+E,WAAar+B,QAAQq+B,UAC9B,CACA,GAAIr+B,SAAWA,QAAQo2B,gBAAkB,KAAM,CAC7CkD,OAAOlD,eAAiBp2B,QAAQo2B,cAClC,CACA,GAAI8H,cAAe,CACjB5E,OAAO4E,cAAgBA,aACzB,CACA,GAAIC,oBAAqB,CACvB7E,OAAO6E,oBAAsBA,mBAC/B,CAEA,MAAMjuC,KAAO,CAACy8D,mBAAoBrzB,QAClC,MAAM0sB,gBAAkBvzE,KAAK8xE,YAAY,kBAAmBr0D,MAC5D,MAAMpW,IAAM+I,OAAOmjE,UAAWjC,0BAC9B,GAAI,UAAWjqE,IAAK,CAClB,IAAIiiD,KAAOrpD,UACX,GAAI,SAAUoH,IAAI/H,MAAO,CACvBgqD,KAAOjiD,IAAI/H,MAAMoD,KAAK4mD,IACxB,CAEA,MAAM,IAAIH,qBAAqB,CAC7BC,OAAQqC,cAAgB,OAAS,WACjC3S,UAAW,GACXuQ,mBAAoBhiD,IAAI/H,MAAM+O,QAC9Bi7C,KAAMA,MAEV,CACA,OAAOjiD,IAAI2W,MACb,CAKA01D,YACE1zE,KAAKiyE,uBAAyB,KAC9BjyE,KAAKkyE,uBAAyB0I,aAAY,KAExC,WACE,UACQ56E,KAAKgyE,cAAc1P,OAAO,QAEhC,MAAM,CACT,EALD,EAKI,GACH,KACHtiE,KAAK66E,sBACP,CAKAlH,WAAWvkC,KACTpvC,KAAKiyE,uBAAyB,MAC9B5yE,QAAQC,MAAM,YAAa8vC,IAAI/gC,QACjC,CAKAulE,WAAW74E,MACTiF,KAAKiyE,uBAAyB,MAC9BjyE,KAAKoyE,yBACFpyE,KAAKoyE,wBAA0B,GAAK/rE,OAAOy0E,iBAC9C,GAAI96E,KAAKmyE,yBAA0B,CACjCxP,aAAa3iE,KAAKmyE,0BAClBnyE,KAAKmyE,yBAA2B,IAClC,CACA,GAAInyE,KAAKkyE,uBAAwB,CAC/B6I,cAAc/6E,KAAKkyE,wBACnBlyE,KAAKkyE,uBAAyB,IAChC,CAEA,GAAIn3E,OAAS,IAAM,CAEjBiF,KAAK66E,uBACL,MACF,CAGA76E,KAAKgzE,6CAA+C,CAAE,EACtDvzE,OAAO4d,QACLrd,KAAKizE,sBACLlvD,SAAQ,EAAElH,KAAMmvD,iBAChBhsE,KAAKg7E,iBAAiBn+D,KAAM,IACvBmvD,aACHt4D,MAAO,WACP,GAEN,CAKQsnE,iBACNn+D,KACAo+D,kBAEA,MAAMC,UAAYl7E,KAAKizE,qBAAqBp2D,OAAOnJ,MACnD1T,KAAKizE,qBAAqBp2D,MAAQo+D,iBAClC,GAAIC,YAAcD,iBAAiBvnE,MAAO,CACxC,MAAMynE,qBACJn7E,KAAK+yE,wCAAwCl2D,MAC/C,GAAIs+D,qBAAsB,CACxBA,qBAAqBp3D,SAAQ+8C,KAC3B,IACEA,GAAGma,iBAAiBvnE,OAEpB,MAAM,IAEZ,CACF,CACF,CAKQ4iE,2BACN8E,qBACAxe,UAEA,MAAM//C,KACJ7c,KAAK8yE,wCAAwCsI,sBAC/C,GAAIv+D,MAAQ,KAAM,CAChB,MAAO,MACT,CACA,MAAMs+D,qBAAwBn7E,KAAK+yE,wCACjCl2D,QACI,IAAIkpC,IACVo1B,qBAAqBhmE,IAAIynD,UACzB,MAAO,KACLue,qBAAqBn1D,OAAO42C,UAC5B,GAAIue,qBAAqB35E,OAAS,EAAG,QAC5BxB,KAAK+yE,wCAAwCl2D,KACtD,EAEJ,CAKA6oC,6BACE,GAAIjmD,OAAOwuC,KAAKjuC,KAAKizE,sBAAsB/3E,SAAW,EAAG,CACvD,GAAI8E,KAAKiyE,uBAAwB,CAC/BjyE,KAAKiyE,uBAAyB,MAC9BjyE,KAAKmyE,yBAA2B9lB,YAAW,KACzCrsD,KAAKmyE,yBAA2B,KAChC,IACEnyE,KAAKgyE,cAAcjR,OACpB,CAAC,MAAO3xB,KAEP,GAAIA,eAAe9zC,MAAO,CACxB+D,QAAQf,IACN,yCAAyC8wC,IAAI/gC,UAEjD,CACF,IACC,IACL,CACA,MACF,CAEA,GAAIrO,KAAKmyE,2BAA6B,KAAM,CAC1CxP,aAAa3iE,KAAKmyE,0BAClBnyE,KAAKmyE,yBAA2B,KAChCnyE,KAAKiyE,uBAAyB,IAChC,CAEA,IAAKjyE,KAAKiyE,uBAAwB,CAChCjyE,KAAKgyE,cAAc/P,UACnB,MACF,CAEA,MAAMoZ,0BAA4Br7E,KAAKoyE,wBACvC,MAAMkJ,+BAAiCA,IAC9BD,4BAA8Br7E,KAAKoyE,8BAGtCxoB,QAAQ+J,IAKZl0D,OAAOwuC,KAAKjuC,KAAKizE,sBAAsB38D,KAAIovC,aACzC,MAAMsmB,aAAehsE,KAAKizE,qBAAqBp2D,MAC/C,GAAImvD,eAAiB/rE,UAAW,CAE9B,MACF,CACA,OAAQ+rE,aAAat4D,OACnB,IAAK,UACL,IAAK,eACH,GAAIs4D,aAAauP,UAAU/5E,OAAS,EAAG,QAc9BxB,KAAKizE,qBAAqBp2D,MACjC,GAAImvD,aAAat4D,QAAU,eAAgB,QAClC1T,KAAKgzE,6CACVhH,aAAawP,qBAEjB,OACMx7E,KAAK66E,uBACX,MACF,MACM,WACJ,MAAMp9D,KAACA,KAAIu+C,OAAEA,QAAUgQ,aACvB,IACEhsE,KAAKg7E,iBAAiBn+D,KAAM,IACvBmvD,aACHt4D,MAAO,gBAET,MAAM8nE,2BACGx7E,KAAKgyE,cAAcxuE,KAAKw4D,OAAQv+C,MACzCzd,KAAKg7E,iBAAiBn+D,KAAM,IACvBmvD,aACHwP,0CACA9nE,MAAO,eAET1T,KAAKgzE,6CACHwI,sBACExP,aAAauP,gBACXv7E,KAAK66E,sBACZ,CAAC,MAAO19E,GACPkC,QAAQC,MACN,YAAYnC,aAAa7B,MAAQ,GAAK,8BAA8B0gE,WACpE,CACEv+C,UACAne,MAAOnC,IAGX,IAAKm+E,iCAAkC,CACrC,MACF,CAEAt7E,KAAKg7E,iBAAiBn+D,KAAM,IACvBmvD,aACHt4D,MAAO,kBAEH1T,KAAK66E,sBACb,CACD,EApCK,GAqCN,MACF,IAAK,aACH,GAAI7O,aAAauP,UAAU/5E,OAAS,EAAG,MAI/B,WACJ,MAAMg6E,qBAACA,qBAAoBC,kBAAEA,mBAAqBzP,aAClD,GACEhsE,KAAKkzE,gCAAgC9zB,IAAIo8B,sBACzC,CAUAx7E,KAAKkzE,gCAAgCltD,OACnCw1D,qBAEJ,KAAO,CACLx7E,KAAKg7E,iBAAiBn+D,KAAM,IACvBmvD,aACHt4D,MAAO,kBAET1T,KAAKg7E,iBAAiBn+D,KAAM,IACvBmvD,aACHt4D,MAAO,kBAET,UACQ1T,KAAKgyE,cAAcxuE,KAAKi4E,kBAAmB,CAC/CD,sBAEH,CAAC,MAAOr+E,GACP,GAAIA,aAAa7B,MAAO,CACtB+D,QAAQC,MAAM,GAAGm8E,2BAA4Bt+E,EAAEkR,QACjD,CACA,IAAKitE,iCAAkC,CACrC,MACF,CAEAt7E,KAAKg7E,iBAAiBn+D,KAAM,IACvBmvD,aACHt4D,MAAO,qBAEH1T,KAAK66E,uBACX,MACF,CACF,CACA76E,KAAKg7E,iBAAiBn+D,KAAM,IACvBmvD,aACHt4D,MAAO,uBAEH1T,KAAK66E,sBACZ,EAnDK,EAoDR,CACA,MAIJ,IAGN,CAKQa,0BAGNF,qBACAG,cAEA,MAAMJ,UACJv7E,KAAKgzE,6CAA6CwI,sBACpD,GAAID,YAAct7E,UAAW,CAC3B,MACF,CACAs7E,UAAUx3D,SAAQ+8C,KAChB,IACEA,MAKK6a,aAEN,CAAC,MAAOx+E,GACPkC,QAAQC,MAAMnC,EAChB,IAEJ,CAKA02E,yBAAyBjR,cACvB,MAAM5kD,OAACA,OAAMguD,aAAEA,cAAgB57D,OAC7BwyD,aACAmJ,2BAEF/rE,KAAK07E,0BAAiD1P,aAAc,CAClEhuD,OAAOhgB,MACPggB,OAAOmP,SAEX,CAKQyuD,kBACNC,mBAyBAp+D,MAEA,MAAM29D,qBAAuBp7E,KAAK4yE,4BAClC,MAAM/1D,KAAOg4C,oBAAoB,CAACgnB,mBAAmB7f,OAAQv+C,OAC7D,MAAMq+D,qBAAuB97E,KAAKizE,qBAAqBp2D,MACvD,GAAIi/D,uBAAyB77E,UAAW,CACtCD,KAAKizE,qBAAqBp2D,MAAQ,IAC7Bg/D,mBACHp+D,UACA89D,UAAW,IAAIx1B,IAAI,CAAC81B,mBAAmBjf,WACvClpD,MAAO,UAEX,KAAO,CACLooE,qBAAqBP,UAAUpmE,IAAI0mE,mBAAmBjf,SACxD,CACA58D,KAAK8yE,wCAAwCsI,sBAAwBv+D,KACrE7c,KAAK6yE,oDACHuI,sBACE11B,iBACK1lD,KAAK6yE,oDACVuI,6BAEKp7E,KAAK8yE,wCAAwCsI,sBACpD,MAAMpP,aAAehsE,KAAKizE,qBAAqBp2D,MAC/C2T,SACEw7C,eAAiB/rE,UACjB,4EAA4Em7E,wBAE9EpP,aAAauP,UAAUv1D,OAAO61D,mBAAmBjf,gBAC3C58D,KAAK66E,sBAAsB,EAEnC76E,KAAK66E,uBACL,OAAOO,oBACT,CAuBAW,gBACEnuD,UACAgvC,SACAsI,oBAEA,MAAMvZ,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,CAACzlD,UAAU6gB,YACXkd,YAAc3rD,KAAK0xE,aAAe,YAClC,SACA7qB,QAEF,OAAO7mD,KAAK47E,kBACV,CACEhf,kBACAZ,OAAQ,mBACRyf,kBAAmB,sBAErBh+D,KAEJ,CAOAioC,kCACE01B,4BAEMp7E,KAAKg8E,+BACTZ,qBACA,iBAEJ,CAKAtH,gCAAgClR,cAC9B,MAAM5kD,OAACA,OAAMguD,aAAEA,cAAgB57D,OAC7BwyD,aACAsJ,kCAEFlsE,KAAK07E,0BAAwD1P,aAAc,CACzE,CACEiQ,UAAWj+D,OAAOhgB,MAAMuxC,OACxB6pC,YAAap7D,OAAOhgB,MAAMmgD,SAE5BngC,OAAOmP,SAEX,CAyBA+uD,uBACErtC,UACA+tB,SACAsI,mBACAiX,cAEA,MAAMxwB,WAACA,WAAU9E,OAAEA,QACjBoe,4BAA4BC,oBAC9B,MAAMznD,KAAOzd,KAAKqzE,WAChB,CAACxkC,UAAUJ,YACXkd,YAAc3rD,KAAK0xE,aAAe,YAClC,SACA7qB,OACIA,OACAs1B,aACE,CAAC7W,QAASD,oCAAoC8W,eAC9Cl8E,WAER,OAAOD,KAAK47E,kBACV,CACEhf,kBACAZ,OAAQ,mBACRyf,kBAAmB,sBAErBh+D,KAEJ,CAOAioC,yCACE01B,4BAEMp7E,KAAKg8E,+BACTZ,qBACA,yBAEJ,CAKAgB,OACEjgC,OACAygB,SACAjR,YAEA,MAAMluC,KAAOzd,KAAKqzE,WAChB,QAAQl3B,SAAW,SAAW,CAACkgC,SAAU,CAAClgC,OAAOx5C,aAAew5C,QAChEwP,YAAc3rD,KAAK0xE,aAAe,aAEpC,OAAO1xE,KAAK47E,kBACV,CACEhf,kBACAZ,OAAQ,gBACRyf,kBAAmB,mBAErBh+D,KAEJ,CAOAioC,2BACE01B,4BAEMp7E,KAAKg8E,+BAA+BZ,qBAAsB,OAClE,CAKAjH,sBAAsBvR,cACpB,MAAM5kD,OAACA,OAAMguD,aAAEA,cAAgB57D,OAAOwyD,aAAc4O,wBACpDxxE,KAAK07E,0BAAwC1P,aAAc,CACzDhuD,OAAOhgB,MACPggB,OAAOmP,SAEX,CAKA4mD,sBAAsBnR,cACpB,MAAM5kD,OAACA,OAAMguD,aAAEA,cAAgB57D,OAAOwyD,aAAcyJ,wBACpDrsE,KAAK07E,0BAA8C1P,aAAc,CAAChuD,QACpE,CAQAs+D,aAAa1f,UACX,OAAO58D,KAAK47E,kBACV,CACEhf,kBACAZ,OAAQ,gBACRyf,kBAAmB,mBAErB,GAEJ,CAOA/1B,+BACE01B,4BAEMp7E,KAAKg8E,+BACTZ,qBACA,cAEJ,CAKApH,6BAA6BpR,cAC3B,MAAM5kD,OAACA,OAAMguD,aAAEA,cAAgB57D,OAC7BwyD,aACAiK,8BAEF7sE,KAAK07E,0BAA8C1P,aAAc,CAAChuD,QACpE,CASAu+D,aAAa3f,UACX,OAAO58D,KAAK47E,kBACV,CACEhf,kBACAZ,OAAQ,wBACRyf,kBAAmB,2BAErB,GAEJ,CAOA/1B,+BACE01B,4BAEMp7E,KAAKg8E,+BACTZ,qBACA,cAEJ,CAMA11B,qCACE01B,qBACAoB,kBAEA,MAAMC,QACJz8E,KAAK6yE,oDACHuI,sBAEJ,GAAIqB,QAAS,OACLA,SACR,KAAO,CACLp9E,QAAQ8kD,KACN,sEACE,KAAKi3B,+BAA+BoB,4BACpC,sBAEN,CACF,CAEAnJ,WACE51D,KACAi/D,SACA/6E,SACA82E,OAEA,MAAM9sB,WAAa+wB,UAAY18E,KAAK0xE,YACpC,GAAI/lB,YAAchqD,UAAY82E,MAAO,CACnC,IAAIlrD,QAAe,CAAE,EACrB,GAAI5rB,SAAU,CACZ4rB,QAAQ5rB,SAAWA,QACrB,CACA,GAAIgqD,WAAY,CACdp+B,QAAQo+B,WAAaA,UACvB,CACA,GAAI8sB,MAAO,CACTlrD,QAAU9tB,OAAOouC,OAAOtgB,QAASkrD,MACnC,CACAh7D,KAAKnhB,KAAKixB,QACZ,CACA,OAAO9P,IACT,CAKA86D,2BACE96D,KACAi/D,SACA/6E,SACA82E,OAEA,MAAM9sB,WAAa+wB,UAAY18E,KAAK0xE,YACpC,GAAI/lB,aAAe,CAAC,YAAa,aAAaxlD,SAASwlD,YAAa,CAClE,MAAM,IAAIrwD,MACR,8CACE0E,KAAK0xE,YACL,8CAEN,CACA,OAAO1xE,KAAKqzE,WAAW51D,KAAMi/D,SAAU/6E,SAAU82E,MACnD,CAKAxE,2BAA2BrR,cACzB,MAAM5kD,OAACA,OAAMguD,aAAEA,cAAgB57D,OAC7BwyD,aACAkK,6BAEF,GAAI9uD,OAAOhgB,QAAU,oBAAqB,CAcxCgC,KAAKkzE,gCAAgC/9D,IAAI62D,aAC3C,CACAhsE,KAAK07E,0BACH1P,aACAhuD,OAAOhgB,QAAU,oBACb,CAAC,CAACwE,KAAM,YAAawb,OAAOmP,SAC5B,CAAC,CAAC3qB,KAAM,SAAUwb,OAAQA,OAAOhgB,OAAQggB,OAAOmP,SAExD,CAUA8oD,YACEn9B,UACA8jB,SACAjR,YAEA,MAAMluC,KAAOzd,KAAKqzE,WAChB,CAACv6B,WACD6S,YAAc3rD,KAAK0xE,aAAe,aAEpC,MAAM0J,qBAAuBp7E,KAAK47E,kBAChC,CACEhf,SAAUA,CAACgG,aAAcz1C,WACvB,GAAIy1C,aAAapgE,OAAS,SAAU,CAClCo6D,SAASgG,aAAa5kD,OAAQmP,SAG9B,IACEntB,KAAK02E,wBAAwB0E,qBAE9B,CAAC,MAAOuB,MACP,CAEJ,GAEF3gB,OAAQ,qBACRyf,kBAAmB,wBAErBh+D,MAEF,OAAO29D,oBACT,CAYAwB,uBACE9jC,UACA8jB,SACArvC,SAEA,MAAMo+B,WAACA,cAAe8sB,OAAS,IAC1BlrD,QACHo+B,WACGp+B,SAAWA,QAAQo+B,YAAe3rD,KAAK0xE,aAAe,aAE3D,MAAMj0D,KAAOzd,KAAKqzE,WAChB,CAACv6B,WACD6S,WACA1rD,UACAw4E,OAEF,MAAM2C,qBAAuBp7E,KAAK47E,kBAChC,CACEhf,SAAUA,CAACgG,aAAcz1C,WACvByvC,SAASgG,aAAcz1C,SAGvB,IACEntB,KAAK02E,wBAAwB0E,qBAE9B,CAAC,MAAOuB,MACP,GAGJ3gB,OAAQ,qBACRyf,kBAAmB,wBAErBh+D,MAEF,OAAO29D,oBACT,CAOA11B,8BACE01B,4BAEMp7E,KAAKg8E,+BACTZ,qBACA,mBAEJ,CAKAlH,sBAAsBtR,cACpB,MAAM5kD,OAACA,OAAMguD,aAAEA,cAAgB57D,OAAOwyD,aAAcmK,wBACpD/sE,KAAK07E,0BAA8C1P,aAAc,CAAChuD,QACpE,CAQA6+D,aAAajgB,UACX,OAAO58D,KAAK47E,kBACV,CACEhf,kBACAZ,OAAQ,gBACRyf,kBAAmB,mBAErB,GAEJ,CAOA/1B,+BACE01B,4BAEMp7E,KAAKg8E,+BACTZ,qBACA,cAEJ,ECjyNK,MAAM0B,QASX/uE,YAAYgvE,SAA0B/8E,KAR9Bg9E,cAAQ,EASdh9E,KAAKg9E,SAAWD,SAAW7sD,iBAC7B,CAOArG,kBACE,OAAO,IAAIizD,QAAQ5sD,kBACrB,CAgBArG,qBACEuG,UACA7C,SAEA,GAAI6C,UAAU71B,aAAe,GAAI,CAC/B,MAAM,IAAIe,MAAM,sBAClB,CACA,MAAMsyB,UAAYwC,UAAUnuB,MAAM,GAAI,IACtC,IAAKsrB,UAAYA,QAAQ0vD,eAAgB,CACvC,MAAM9sD,cAAgBC,UAAUnuB,MAAM,EAAG,IACzC,MAAMi7E,kBAAoBjwD,aAAakD,eACvC,IAAK,IAAIgtD,GAAK,EAAGA,GAAK,GAAIA,KAAM,CAC9B,GAAIvvD,UAAUuvD,MAAQD,kBAAkBC,IAAK,CAC3C,MAAM,IAAI7hF,MAAM,gCAClB,CACF,CACF,CACA,OAAO,IAAIwhF,QAAQ,CAAClvD,oBAAWwC,qBACjC,CASAvG,gBAAgB9N,MACd,MAAM6R,UAAYX,aAAalR,MAC/B,MAAMqU,UAAY,IAAIv1B,WAAW,IACjCu1B,UAAU7sB,IAAIwY,MACdqU,UAAU7sB,IAAIqqB,UAAW,IACzB,OAAO,IAAIkvD,QAAQ,CAAClvD,oBAAWwC,qBACjC,CAOIxC,gBACF,OAAO,IAAI2gB,UAAUvuC,KAAKg9E,SAASpvD,UACrC,CAMIwC,gBACF,OAAO,IAAIv1B,WAAWmF,KAAKg9E,SAAS5sD,UACtC,QCdWgtD,iCAAmC39E,OAAOqiB,OAAO,CAC5Du7D,kBAAmB,CACjBprD,MAAO,EACP+hB,OAAQoG,cAAAA,OAEN,CACAA,cAAAA,IAAiB,eACjBkjC,IAAiB,cACjBljC,iBAAgB,eAGpBmjC,kBAAmB,CACjBtrD,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,kBAEtB04C,kBAAmB,CACjBvrD,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CACA4H,cAAAA,IAAiB,eACjBkjC,MACAljC,cAAAA,IACEpI,YACAoI,cAAmBr9C,OAACq9C,cAAgBtV,OAAK,GACzC,gBAIN24C,sBAAuB,CACrBxrD,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,kBAEtB44C,iBAAkB,CAChBzrD,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,oBAIjB,MAAM64C,8BAIX5vE,cAAc,CAEd8b,6BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAEhC,MAAM4hB,sBAAwBrW,cAAgBtV,IAAC,eAC/C,MAAM7S,MAAQw+B,sBAAsB9rB,OAAOqV,YAAYt3C,MAEvD,IAAIF,KACJ,IAAK,MAAOo7E,WAAY5pC,UAAWv0C,OAAO4d,QACxC+/D,kCACC,CACD,GAAKppC,OAAe/hB,OAASA,MAAO,CAClCzvB,KAAOo7E,WACP,KACF,CACF,CACA,IAAKp7E,KAAM,CACT,MAAM,IAAIlH,MACR,2DAEJ,CACA,OAAOkH,IACT,CAEAqnB,+BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK69E,gBAAgB7jC,YAAY/L,KAAM,GAEvC,MAAM6vC,WAACA,YAAcrxB,aACnB2wB,iCAAiCC,kBACjCrjC,YAAYt3C,MAGd,MAAO,CACLqhE,UAAW/pB,YAAY/L,KAAK,GAAGsB,OAC/B+L,MAAOtB,YAAY/L,KAAK,GAAGsB,OAC3BuuC,WAAYz3E,OAAOy3E,YAEvB,CAEAj0D,+BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC,GAAImL,YAAY/L,KAAK/yC,OAAS,EAAG,CAC/B,MAAM,IAAII,MACR,8BAA8B0+C,YAAY/L,KAAK/yC,mCAEnD,CAEA,MAAM+hD,UAACA,WAAawP,aAClB2wB,iCAAiCI,kBACjCxjC,YAAYt3C,MAEd,MAAO,CACLm6C,YAAa7C,YAAY/L,KAAK,GAAGsB,OACjCw0B,UAAW/pB,YAAY/L,KAAK,GAAGsB,OAC/B+L,MACEtB,YAAY/L,KAAK/yC,OAAS,EAAI8+C,YAAY/L,KAAK,GAAGsB,OAAStvC,UAC7Dg9C,UAAWA,UAAU3mC,KAAIxZ,QAAU,IAAIyxC,UAAUzxC,UAErD,CAEA+sB,8BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK69E,gBAAgB7jC,YAAY/L,KAAM,GAEvC,MAAO,CACL4O,YAAa7C,YAAY/L,KAAK,GAAGsB,OACjCw0B,UAAW/pB,YAAY/L,KAAK,GAAGsB,OAC/BwuC,UAAW/jC,YAAY/L,KAAK,GAAGsB,OAEnC,CAEA1lB,+BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK69E,gBAAgB7jC,YAAY/L,KAAM,GAEvC,MAAO,CACL4O,YAAa7C,YAAY/L,KAAK,GAAGsB,OACjCw0B,UAAW/pB,YAAY/L,KAAK,GAAGsB,OAEnC,CAEA1lB,mCACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK69E,gBAAgB7jC,YAAY/L,KAAM,GAEvC,MAAO,CACL4O,YAAa7C,YAAY/L,KAAK,GAAGsB,OACjCw0B,UAAW/pB,YAAY/L,KAAK,GAAGsB,OAEnC,CAKA1lB,sBAAsBglB,WACpB,IAAKA,UAAUjqC,OAAOo5E,0BAA0BnvC,WAAY,CAC1D,MAAM,IAAIvzC,MACR,mEAEJ,CACF,CAIAuuB,uBAAuBokB,KAAkBtzB,gBACvC,GAAIszB,KAAK/yC,OAASyf,eAAgB,CAChC,MAAM,IAAIrf,MACR,8BAA8B2yC,KAAK/yC,kCAAkCyf,iBAEzE,CACF,EAGK,MAAMqjE,0BAIXjwE,cAAc,CAMd8b,yBAAyBwoC,QACvB,MAAO4rB,mBAAoBC,UAAY3vC,UAAUc,uBAC/C,CACEgjB,OAAO0R,UAAUzzC,WACjB2/B,gBAAgB5+C,OAAOghD,OAAOyrB,aAEhC99E,KAAK6uC,WAGP,MAAMrsC,KAAO46E,iCAAiCC,kBAC9C,MAAM36E,KAAO4pD,WAAW9pD,KAAM,CAC5Bs7E,WAAY9zE,OAAOqoD,OAAOyrB,YAC1BI,SAAUA,WAGZ,MAAMjwC,KAAO,CACX,CACEsB,OAAQ0uC,mBACRviC,SAAU,MACVC,WAAY,MAEd,CACEpM,OAAQ8iB,OAAO0R,UACfroB,SAAU,KACVC,WAAY,OAEd,CACEpM,OAAQ8iB,OAAO/W,MACfI,SAAU,KACVC,WAAY,MAEd,CACEpM,OAAQ4iB,cAActjB,UACtB6M,SAAU,MACVC,WAAY,QAIhB,MAAO,CACL,IAAIuH,uBAAuB,CACzBrU,UAAW7uC,KAAK6uC,UAChBZ,KAAMA,KACNvrC,KAAMA,OAERu7E,mBAEJ,CAEAp0D,yBAAyBwoC,QACvB,MAAM7vD,KAAO46E,iCAAiCG,kBAC9C,MAAM76E,KAAO4pD,WAAW9pD,MAExB,MAAMyrC,KAAO,CACX,CACEsB,OAAQ8iB,OAAOxV,YACfnB,SAAU,MACVC,WAAY,MAEd,CACEpM,OAAQ8iB,OAAO0R,UACfroB,SAAU,KACVC,WAAY,QAIhB,OAAO,IAAIuH,uBAAuB,CAChCrU,UAAW7uC,KAAK6uC,UAChBZ,KAAMA,KACNvrC,KAAMA,MAEV,CAEAmnB,yBAAyBwoC,QACvB,MAAM7vD,KAAO46E,iCAAiCI,kBAC9C,MAAM96E,KAAO4pD,WAAW9pD,KAAM,CAC5By6C,UAAWoV,OAAOpV,UAAU3mC,KAAI6nE,MAAQA,KAAK7sE,cAG/C,MAAM28B,KAAO,CACX,CACEsB,OAAQ8iB,OAAOxV,YACfnB,SAAU,MACVC,WAAY,MAEd,CACEpM,OAAQ8iB,OAAO0R,UACfroB,SAAU,KACVC,WAAY,QAIhB,GAAI0W,OAAO/W,MAAO,CAChBrN,KAAK3xC,KACH,CACEizC,OAAQ8iB,OAAO/W,MACfI,SAAU,KACVC,WAAY,MAEd,CACEpM,OAAQ4iB,cAActjB,UACtB6M,SAAU,MACVC,WAAY,OAGlB,CAEA,OAAO,IAAIuH,uBAAuB,CAChCrU,UAAW7uC,KAAK6uC,UAChBZ,KAAMA,KACNvrC,KAAMA,MAEV,CAEAmnB,6BAA6BwoC,QAC3B,MAAM7vD,KAAO46E,iCAAiCK,sBAC9C,MAAM/6E,KAAO4pD,WAAW9pD,MAExB,MAAMyrC,KAAO,CACX,CACEsB,OAAQ8iB,OAAOxV,YACfnB,SAAU,MACVC,WAAY,MAEd,CACEpM,OAAQ8iB,OAAO0R,UACfroB,SAAU,KACVC,WAAY,QAIhB,OAAO,IAAIuH,uBAAuB,CAChCrU,UAAW7uC,KAAK6uC,UAChBZ,KAAMA,KACNvrC,KAAMA,MAEV,CAEAmnB,wBAAwBwoC,QACtB,MAAM7vD,KAAO46E,iCAAiCM,iBAC9C,MAAMh7E,KAAO4pD,WAAW9pD,MAExB,MAAMyrC,KAAO,CACX,CACEsB,OAAQ8iB,OAAOxV,YACfnB,SAAU,MACVC,WAAY,MAEd,CACEpM,OAAQ8iB,OAAO0R,UACfroB,SAAU,KACVC,WAAY,OAEd,CACEpM,OAAQ8iB,OAAO0rB,UACfriC,SAAU,MACVC,WAAY,OAIhB,OAAO,IAAIuH,uBAAuB,CAChCrU,UAAW7uC,KAAK6uC,UAChBZ,KAAMA,KACNvrC,KAAMA,MAEV,EA9KWs7E,0BAMJnvC,UAAuB,IAAIN,UAChC,+CC9PG,MAAM6vC,yBAIXrwE,cAAc,CAKd8b,6BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAEhC,MAAM4hB,sBAAwBrW,cAAenC,GAAC,eAC9C,MAAMyY,UAAYD,sBAAsB9rB,OAAOqV,YAAYt3C,MAE3D,IAAIF,KACJ,IAAK,MAAOmuD,OAAQ3c,UAAWv0C,OAAO4d,QACpCghE,oCACC,CACD,GAAIrqC,OAAO/hB,OAASy+B,UAAW,CAC7BluD,KAAOmuD,OACP,KACF,CACF,CAEA,IAAKnuD,KAAM,CACT,MAAM,IAAIlH,MACR,6DAEJ,CAEA,OAAOkH,IACT,CAKAqnB,0BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC,MAAM1/B,MAACA,MAAKmvE,cAAEA,eAAiB7xB,aAC7B4xB,mCAAmCE,aACnCvkC,YAAYt3C,MAEd,MAAO,CAACyM,YAAOmvE,4BACjB,CAKAz0D,8BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC,MAAMzmC,MAACA,OAASqkD,aACd4xB,mCAAmCG,iBACnCxkC,YAAYt3C,MAEd,MAAO,CAAC0F,YACV,CAKAyhB,iCACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC,MAAM1/B,MAACA,OAASs9C,aACd4xB,mCAAmCI,oBACnCzkC,YAAYt3C,MAEd,MAAO,CAACyM,YACV,CAKA0a,iCACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC,MAAM6vC,cAACA,eAAiBjyB,aACtB4xB,mCAAmCM,oBACnC3kC,YAAYt3C,MAEd,MAAO,CAACg8E,4BACV,CAKA70D,sBAAsBglB,WACpB,IAAKA,UAAUjqC,OAAOg6E,qBAAqB/vC,WAAY,CACrD,MAAM,IAAIvzC,MACR,6DAEJ,CACF,QA+DW+iF,mCAAqC5+E,OAAOqiB,OAItD,CACDy8D,aAAc,CACZtsD,MAAO,EACP+hB,OAAQoG,cAAAA,OAEN,CACAA,cAAAA,GAAgB,eAChBA,cAAgBtV,IAAC,SACjBsV,kBAAiB,oBAGrBokC,iBAAkB,CAChBvsD,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAenC,GAAC,eAAgBmC,cAAAA,IAAiB,YAEtDqkC,oBAAqB,CACnBxsD,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAenC,GAAC,eAAgBmC,cAAAA,IAAiB,YAEtDukC,oBAAqB,CACnB1sD,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAenC,GAAC,eAAgB9hC,IAAI,sBAOpC,MAAMyoE,qBAIX7wE,cAAc,CAYd8b,oBAAoBwoC,QAClB,MAAM7vD,KAAO67E,mCAAmCE,aAChD,MAAM77E,KAAO4pD,WAAW9pD,KAAM6vD,QAC9B,OAAO,IAAInP,uBAAuB,CAChCjV,KAAM,GACNY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAEAmnB,wBACEwoC,QAEA,MAAM7vD,KAAO67E,mCAAmCG,iBAChD,MAAM97E,KAAO4pD,WAAW9pD,KAAM6vD,QAC9B,OAAO,IAAInP,uBAAuB,CAChCjV,KAAM,GACNY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAEAmnB,2BACEwoC,QAEA,MAAM7vD,KAAO67E,mCAAmCI,oBAChD,MAAM/7E,KAAO4pD,WAAW9pD,KAAM6vD,QAC9B,OAAO,IAAInP,uBAAuB,CAChCjV,KAAM,GACNY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAEAmnB,2BACEwoC,QAEA,MAAM7vD,KAAO67E,mCAAmCM,oBAChD,MAAMj8E,KAAO4pD,WAAW9pD,KAAM,CAC5Bk8E,cAAe10E,OAAOqoD,OAAOqsB,iBAE/B,OAAO,IAAIx7B,uBAAuB,CAChCjV,KAAM,GACNY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,EA9DWk8E,qBASJ/vC,UAAuB,IAAIN,UAChC,+CC1NJ,MAAMswC,oBAAoB,GAC1B,MAAMC,mBAAmB,GACzB,MAAMC,gBAAkB,GAqBxB,MAAMC,2BAA6B5kC,cAAmB5H,OAYpD,CACA4H,cAAenC,GAAC,iBAChBmC,cAAAA,GAAgB,WAChBA,cAAAA,IAAiB,mBACjBA,cAAAA,IAAiB,6BACjBA,kBAAiB,mBACjBA,cAAAA,IAAiB,6BACjBA,cAAAA,IAAiB,qBACjBA,cAAAA,IAAiB,mBACjBA,kBAAiB,6BAGZ,MAAM6kC,eAIXlxE,cAAc,CAcd8b,sCACEwoC,QAEA,MAAMzkC,UAACA,UAASvf,QAAEA,QAAOyqC,UAAEA,UAASomC,iBAAEA,kBAAoB7sB,OAE1D7hC,SACE5C,UAAU1yB,SAAW4jF,mBACrB,sBAAsBA,yCAAuClxD,UAAU1yB,gBAGzEs1B,SACEsoB,UAAU59C,SAAW6jF,gBACrB,qBAAqBA,sCAAsCjmC,UAAU59C,gBAGvE,MAAMikF,gBAAkBH,2BAA2BzrC,KACnD,MAAM6rC,gBAAkBD,gBAAkBvxD,UAAU1yB,OACpD,MAAMmkF,kBAAoBD,gBAAkBtmC,UAAU59C,OACtD,MAAMokF,cAAgB,EAEtB,MAAM5sB,gBAAkB5zD,cAAAA,OAAO2C,MAAM49E,kBAAoBhxE,QAAQnT,QAEjE,MAAM+2B,MACJitD,kBAAoB,KAChB,MACAA,iBAENF,2BAA2B3tE,OACzB,CACEiuE,4BACAjsD,QAAS,EACT+rD,gCACAG,0BAA2BttD,MAC3BktD,gCACAK,0BAA2BvtD,MAC3BotD,oCACAI,gBAAiBpxE,QAAQnT,OACzBwkF,wBAAyBztD,OAE3BygC,iBAGFA,gBAAgBhxD,KAAKksB,UAAWuxD,iBAChCzsB,gBAAgBhxD,KAAKo3C,UAAWsmC,iBAChC1sB,gBAAgBhxD,KAAK2M,QAASgxE,mBAE9B,OAAO,IAAIn8B,uBAAuB,CAChCjV,KAAM,GACNY,UAAWowC,eAAepwC,UAC1BnsC,KAAMgwD,iBAEV,CAMA7oC,uCACEwoC,QAEA,MAAMstB,WAACA,WAAUtxE,QAAEA,QAAO6wE,iBAAEA,kBAAoB7sB,OAEhD7hC,SACEmvD,WAAWzkF,SAAW2jF,oBACtB,uBAAuBA,0CAAwCc,WAAWzkF,gBAG5E,IACE,MAAM6hF,QAAUD,QAAQ8C,cAAcD,YACtC,MAAM/xD,UAAYmvD,QAAQnvD,UAAUtc,UACpC,MAAMwnC,UAAYxrB,KAAKjf,QAAS0uE,QAAQ3sD,WAExC,OAAOpwB,KAAK6/E,+BAA+B,CACzCjyD,oBACAvf,gBACAyqC,oBACAomC,mCAEH,CAAC,MAAO5/E,OACP,MAAM,IAAIhE,MAAM,+BAA+BgE,QACjD,CACF,EAnGW2/E,eASJpwC,UAAuB,IAAIN,UAChC,+CClEJ,MAAM16B,WAA6B7J,OAAO,GAAK,GAAK,GACpD,MAAMyI,KAAuBzI,OAAO,IAGpC,SAAS8J,QAAQxP,EAAGyP,GAAK,OACrB,GAAIA,GACA,MAAO,CAAE5D,EAAG9J,OAAO/B,EAAIuP,YAAahB,EAAGxM,OAAQ/B,GAAKmO,KAAQoB,aAChE,MAAO,CAAE1D,EAAG9J,OAAQ/B,GAAKmO,KAAQoB,YAAc,EAAGhB,EAAGxM,OAAO/B,EAAIuP,YAAc,EAClF,CACA,SAAS3E,MAAM8E,IAAKD,GAAK,OACrB,IAAIE,GAAK,IAAIC,YAAYF,IAAI9Y,QAC7B,IAAIiZ,GAAK,IAAID,YAAYF,IAAI9Y,QAC7B,IAAK,IAAIF,EAAI,EAAGA,EAAIgZ,IAAI9Y,OAAQF,IAAK,CACjC,MAAMmV,EAAEA,EAAC0C,EAAEA,GAAMiB,QAAQE,IAAIhZ,GAAI+Y,KAChCE,GAAGjZ,GAAImZ,GAAGnZ,IAAM,CAACmV,EAAG0C,EAC7B,CACI,MAAO,CAACoB,GAAIE,GAChB,CAeA,MAAMY,OAAS,CAAC5E,EAAG0C,EAAGnV,IAAOyS,GAAKzS,EAAMmV,IAAO,GAAKnV,EACpD,MAAMsX,OAAS,CAAC7E,EAAG0C,EAAGnV,IAAOmV,GAAKnV,EAAMyS,IAAO,GAAKzS,EAEpD,MAAMuX,OAAS,CAAC9E,EAAG0C,EAAGnV,IAAOmV,GAAMnV,EAAI,GAAQyS,IAAO,GAAKzS,EAC3D,MAAMwX,OAAS,CAAC/E,EAAG0C,EAAGnV,IAAOyS,GAAMzS,EAAI,GAAQmV,IAAO,GAAKnV,EC9B3D,MAAMoiF,QAAU,GAChB,MAAMC,UAAY,GAClB,MAAMC,WAAa,GACnB,MAAMxnE,MAAsBxO,OAAO,GACnC,MAAMyO,MAAsBzO,OAAO,GACnC,MAAM0O,MAAsB1O,OAAO,GACnC,MAAMi2E,IAAsBj2E,OAAO,GACnC,MAAMk2E,MAAwBl2E,OAAO,KACrC,MAAMm2E,OAAyBn2E,OAAO,KACtC,IAAK,IAAIiqD,MAAQ,EAAGzmC,EAAI/U,MAAK1V,EAAI,EAAGC,EAAI,EAAGixD,MAAQ,GAAIA,QAAS,EAE3DlxD,EAAGC,GAAK,CAACA,GAAI,EAAID,EAAI,EAAIC,GAAK,GAC/B88E,QAAQxjF,KAAK,GAAK,EAAI0G,EAAID,IAE1Bg9E,UAAUzjF,MAAQ23D,MAAQ,IAAMA,MAAQ,GAAM,EAAK,IAEnD,IAAI1/B,EAAI/b,MACR,IAAK,IAAItS,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxBsnB,GAAMA,GAAK/U,OAAS+U,GAAKyyD,KAAOE,QAAWD,MAC3C,GAAI1yD,EAAI9U,MACJ6b,GAAK9b,QAASA,OAAuBzO,OAAO9D,IAAMuS,KAC9D,CACIunE,WAAW1jF,KAAKi4B,EACpB,CACA,MAAO6rD,YAAaC,aAA+BnxE,MAAM8wE,WAAY,MAErE,MAAMM,MAAQ,CAACnwE,EAAG0C,EAAGnV,IAAOA,EAAI,GAAKuX,OAAO9E,EAAG0C,EAAGnV,GAAKqX,OAAO5E,EAAG0C,EAAGnV,GACpE,MAAM6iF,MAAQ,CAACpwE,EAAG0C,EAAGnV,IAAOA,EAAI,GAAKwX,OAAO/E,EAAG0C,EAAGnV,GAAKsX,OAAO7E,EAAG0C,EAAGnV,GAE7D,SAAS8iF,QAAQ9iF,EAAG+iF,OAAS,IAChC,MAAM/1D,EAAI,IAAIxW,YAAY,EAAI,GAE9B,IAAK,IAAI+/C,MAAQ,GAAKwsB,OAAQxsB,MAAQ,GAAIA,QAAS,CAE/C,IAAK,IAAIlxD,EAAI,EAAGA,EAAI,GAAIA,IACpB2nB,EAAE3nB,GAAKrF,EAAEqF,GAAKrF,EAAEqF,EAAI,IAAMrF,EAAEqF,EAAI,IAAMrF,EAAEqF,EAAI,IAAMrF,EAAEqF,EAAI,IAC5D,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC5B,MAAM29E,MAAQ39E,EAAI,GAAK,GACvB,MAAM49E,MAAQ59E,EAAI,GAAK,GACvB,MAAM69E,GAAKl2D,EAAEi2D,MACb,MAAME,GAAKn2D,EAAEi2D,KAAO,GACpB,MAAMG,GAAKR,MAAMM,GAAIC,GAAI,GAAKn2D,EAAEg2D,MAChC,MAAMK,GAAKR,MAAMK,GAAIC,GAAI,GAAKn2D,EAAEg2D,KAAO,GACvC,IAAK,IAAI19E,EAAI,EAAGA,EAAI,GAAIA,GAAK,GAAI,CAC7BtF,EAAEqF,EAAIC,IAAM89E,GACZpjF,EAAEqF,EAAIC,EAAI,IAAM+9E,EAChC,CACA,CAEQ,IAAIC,KAAOtjF,EAAE,GACb,IAAIujF,KAAOvjF,EAAE,GACb,IAAK,IAAI62B,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAMpjB,MAAQ4uE,UAAUxrD,GACxB,MAAMusD,GAAKR,MAAMU,KAAMC,KAAM9vE,OAC7B,MAAM4vE,GAAKR,MAAMS,KAAMC,KAAM9vE,OAC7B,MAAM+vE,GAAKpB,QAAQvrD,GACnBysD,KAAOtjF,EAAEwjF,IACTD,KAAOvjF,EAAEwjF,GAAK,GACdxjF,EAAEwjF,IAAMJ,GACRpjF,EAAEwjF,GAAK,GAAKH,EACxB,CAEQ,IAAK,IAAI/9E,EAAI,EAAGA,EAAI,GAAIA,GAAK,GAAI,CAC7B,IAAK,IAAID,EAAI,EAAGA,EAAI,GAAIA,IACpB2nB,EAAE3nB,GAAKrF,EAAEsF,EAAID,GACjB,IAAK,IAAIA,EAAI,EAAGA,EAAI,GAAIA,IACpBrF,EAAEsF,EAAID,KAAO2nB,GAAG3nB,EAAI,GAAK,IAAM2nB,GAAG3nB,EAAI,GAAK,GAC3D,CAEQrF,EAAE,IAAM0iF,YAAYnsB,OACpBv2D,EAAE,IAAM2iF,YAAYpsB,MAC5B,CACIvpC,EAAEhpB,KAAK,EACX,CACO,MAAMy/E,eAAevvE,KAExB7D,YAAYuC,SAAU8wE,OAAQ/wE,UAAWgxE,UAAY,MAAOZ,OAAS,IACjEzyE,QACAhO,KAAKsQ,SAAWA,SAChBtQ,KAAKohF,OAASA,OACdphF,KAAKqQ,UAAYA,UACjBrQ,KAAKqhF,UAAYA,UACjBrhF,KAAKygF,OAASA,OACdzgF,KAAKsD,IAAM,EACXtD,KAAKshF,OAAS,EACdthF,KAAK2Q,SAAW,MAChB3Q,KAAK0Q,UAAY,MAEjBb,QAAQQ,WAER,GAAI,GAAKrQ,KAAKsQ,UAAYtQ,KAAKsQ,UAAY,IACvC,MAAM,IAAIhV,MAAM,4CACpB0E,KAAK0T,MAAQ,IAAI7Y,WAAW,KAC5BmF,KAAKuhF,QAAUz8C,IAAI9kC,KAAK0T,MAChC,CACI8tE,SACI,IAAKxkF,KACDgoC,WAAWhlC,KAAKuhF,SACpBf,QAAQxgF,KAAKuhF,QAASvhF,KAAKygF,QAC3B,IAAKzjF,KACDgoC,WAAWhlC,KAAKuhF,SACpBvhF,KAAKshF,OAAS,EACdthF,KAAKsD,IAAM,CACnB,CACI4O,OAAOxP,MACH6N,QAAQvQ,MACR,MAAMsQ,SAAEA,SAAQoD,MAAEA,OAAU1T,KAC5B0C,KAAO4O,QAAQ5O,MACf,MAAMzH,IAAMyH,KAAKxH,OACjB,IAAK,IAAIoI,IAAM,EAAGA,IAAMrI,KAAM,CAC1B,MAAMkY,KAAOtV,KAAKoF,IAAIqN,SAAWtQ,KAAKsD,IAAKrI,IAAMqI,KACjD,IAAK,IAAItI,EAAI,EAAGA,EAAImY,KAAMnY,IACtB0Y,MAAM1T,KAAKsD,QAAUZ,KAAKY,OAC9B,GAAItD,KAAKsD,MAAQgN,SACbtQ,KAAKwhF,QACrB,CACQ,OAAOxhF,IACf,CACIyhF,SACI,GAAIzhF,KAAK2Q,SACL,OACJ3Q,KAAK2Q,SAAW,KAChB,MAAM+C,MAAEA,MAAK0tE,OAAEA,OAAM99E,IAAEA,IAAGgN,SAAEA,UAAatQ,KAEzC0T,MAAMpQ,MAAQ89E,OACd,IAAKA,OAAS,OAAU,GAAK99E,MAAQgN,SAAW,EAC5CtQ,KAAKwhF,SACT9tE,MAAMpD,SAAW,IAAM,IACvBtQ,KAAKwhF,QACb,CACIE,UAAUx5E,KACNqI,QAAQvQ,KAAM,OACdgQ,OAAO9H,KACPlI,KAAKyhF,SACL,MAAME,UAAY3hF,KAAK0T,MACvB,MAAMpD,SAAEA,UAAatQ,KACrB,IAAK,IAAIsD,IAAM,EAAGrI,IAAMiN,IAAIhN,OAAQoI,IAAMrI,KAAM,CAC5C,GAAI+E,KAAKshF,QAAUhxE,SACftQ,KAAKwhF,SACT,MAAMruE,KAAOtV,KAAKoF,IAAIqN,SAAWtQ,KAAKshF,OAAQrmF,IAAMqI,KACpD4E,IAAI3E,IAAIo+E,UAAUr5E,SAAStI,KAAKshF,OAAQthF,KAAKshF,OAASnuE,MAAO7P,KAC7DtD,KAAKshF,QAAUnuE,KACf7P,KAAO6P,IACnB,CACQ,OAAOjL,GACf,CACI05E,QAAQ15E,KAEJ,IAAKlI,KAAKqhF,UACN,MAAM,IAAI/lF,MAAM,yCACpB,OAAO0E,KAAK0hF,UAAUx5E,IAC9B,CACI25E,IAAIz5E,OACAyH,QAAQzH,OACR,OAAOpI,KAAK4hF,QAAQ,IAAI/mF,WAAWuN,OAC3C,CACImL,WAAWrL,KACP0I,QAAQ1I,IAAKlI,MACb,GAAIA,KAAK2Q,SACL,MAAM,IAAIrV,MAAM,+BACpB0E,KAAK0hF,UAAUx5E,KACflI,KAAK2T,UACL,OAAOzL,GACf,CACIiK,SACI,OAAOnS,KAAKuT,WAAW,IAAI1Y,WAAWmF,KAAKqQ,WACnD,CACIsD,UACI3T,KAAK0Q,UAAY,KACjB1Q,KAAK0T,MAAMhS,KAAK,EACxB,CACIoQ,WAAW8B,IACP,MAAMtD,SAAEA,SAAQ8wE,OAAEA,OAAM/wE,UAAEA,UAASowE,OAAEA,OAAMY,UAAEA,WAAcrhF,KAC3D4T,KAAOA,GAAK,IAAIutE,OAAO7wE,SAAU8wE,OAAQ/wE,UAAWgxE,UAAWZ,SAC/D7sE,GAAG2tE,QAAQh+E,IAAIvD,KAAKuhF,SACpB3tE,GAAGtQ,IAAMtD,KAAKsD,IACdsQ,GAAG0tE,OAASthF,KAAKshF,OACjB1tE,GAAGjD,SAAW3Q,KAAK2Q,SACnBiD,GAAG6sE,OAASA,OAEZ7sE,GAAGwtE,OAASA,OACZxtE,GAAGvD,UAAYA,UACfuD,GAAGytE,UAAYA,UACfztE,GAAGlD,UAAY1Q,KAAK0Q,UACpB,OAAOkD,EACf,EAEA,MAAMoI,IAAM,CAAColE,OAAQ9wE,SAAUD,YAAc0B,iBAAgB,IAAM,IAAIovE,OAAO7wE,SAAU8wE,OAAQ/wE,aAczF,MAAMyxE,WAA6B9lE,IAAI,EAAM,IAAK,IAAM,GCxM/D,MAAMipB,SAA2B,IAAI/wB,YAAY,CAC7C,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,aAKxF,MAAMgxB,UAA4B,IAAIhxB,YAAY,CAC9C,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,aAIxF,MAAMixB,SAA2B,IAAIjxB,YAAY,IAC1C,MAAMkxB,eAAenyB,SACxBlF,cACIC,MAAM,GAAI,GAAI,EAAG,OAGjBhO,KAAKwZ,EAAI0rB,UAAU,GAAK,EACxBllC,KAAK0qB,EAAIwa,UAAU,GAAK,EACxBllC,KAAK2qB,EAAIua,UAAU,GAAK,EACxBllC,KAAK4qB,EAAIsa,UAAU,GAAK,EACxBllC,KAAK0N,EAAIw3B,UAAU,GAAK,EACxBllC,KAAKyZ,EAAIyrB,UAAU,GAAK,EACxBllC,KAAK8qB,EAAIoa,UAAU,GAAK,EACxBllC,KAAK+qB,EAAIma,UAAU,GAAK,CAChC,CACIplC,MACI,MAAM0Z,EAAEA,EAACkR,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACld,EAAEA,EAAC+L,EAAEA,EAACqR,EAAEA,EAACC,EAAEA,GAAM/qB,KACnC,MAAO,CAACwZ,EAAGkR,EAAGC,EAAGC,EAAGld,EAAG+L,EAAGqR,EAAGC,EACrC,CAEIxnB,IAAIiW,EAAGkR,EAAGC,EAAGC,EAAGld,EAAG+L,EAAGqR,EAAGC,GACrB/qB,KAAKwZ,EAAIA,EAAI,EACbxZ,KAAK0qB,EAAIA,EAAI,EACb1qB,KAAK2qB,EAAIA,EAAI,EACb3qB,KAAK4qB,EAAIA,EAAI,EACb5qB,KAAK0N,EAAIA,EAAI,EACb1N,KAAKyZ,EAAIA,EAAI,EACbzZ,KAAK8qB,EAAIA,EAAI,EACb9qB,KAAK+qB,EAAIA,EAAI,CACrB,CACI1X,QAAQb,KAAMzV,QAEV,IAAK,IAAI/B,EAAI,EAAGA,EAAI,GAAIA,IAAK+B,QAAU,EACnCooC,SAASnqC,GAAKwX,KAAKwE,UAAUja,OAAQ,OACzC,IAAK,IAAI/B,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC1B,MAAMqqC,IAAMF,SAASnqC,EAAI,IACzB,MAAMsqC,GAAKH,SAASnqC,EAAI,GACxB,MAAMuqC,GAAKt0B,OAAKo0B,IAAK,GAAKp0B,OAAKo0B,IAAK,IAAOA,MAAQ,EACnD,MAAMG,GAAKv0B,OAAKq0B,GAAI,IAAMr0B,OAAKq0B,GAAI,IAAOA,KAAO,GACjDH,SAASnqC,GAAMwqC,GAAKL,SAASnqC,EAAI,GAAKuqC,GAAKJ,SAASnqC,EAAI,IAAO,CAC3E,CAEQ,IAAIwe,EAAEA,EAACkR,EAAEA,EAACC,EAAEA,EAACC,EAAEA,EAACld,EAAEA,EAAC+L,EAAEA,EAACqR,EAAEA,EAACC,EAAEA,GAAM/qB,KACjC,IAAK,IAAIhF,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,MAAMyqC,OAASx0B,OAAKvD,EAAG,GAAKuD,OAAKvD,EAAG,IAAMuD,OAAKvD,EAAG,IAClD,MAAM0d,GAAML,EAAI0a,OAAS1yB,MAAIrF,EAAG+L,EAAGqR,GAAKma,SAASjqC,GAAKmqC,SAASnqC,GAAM,EACrE,MAAM0qC,OAASz0B,OAAKuI,EAAG,GAAKvI,OAAKuI,EAAG,IAAMvI,OAAKuI,EAAG,IAClD,MAAM6R,GAAMqa,OAAS1yB,MAAIwG,EAAGkR,EAAGC,GAAM,EACrCI,EAAID,EACJA,EAAIrR,EACJA,EAAI/L,EACJA,EAAKkd,EAAIQ,GAAM,EACfR,EAAID,EACJA,EAAID,EACJA,EAAIlR,EACJA,EAAK4R,GAAKC,GAAM,CAC5B,CAEQ7R,EAAKA,EAAIxZ,KAAKwZ,EAAK,EACnBkR,EAAKA,EAAI1qB,KAAK0qB,EAAK,EACnBC,EAAKA,EAAI3qB,KAAK2qB,EAAK,EACnBC,EAAKA,EAAI5qB,KAAK4qB,EAAK,EACnBld,EAAKA,EAAI1N,KAAK0N,EAAK,EACnB+L,EAAKA,EAAIzZ,KAAKyZ,EAAK,EACnBqR,EAAKA,EAAI9qB,KAAK8qB,EAAK,EACnBC,EAAKA,EAAI/qB,KAAK+qB,EAAK,EACnB/qB,KAAKuD,IAAIiW,EAAGkR,EAAGC,EAAGC,EAAGld,EAAG+L,EAAGqR,EAAGC,EACtC,CACIzX,aACI6xB,SAASzjC,KAAK,EACtB,CACIiS,UACI3T,KAAKuD,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9BvD,KAAKlD,OAAO4E,KAAK,EACzB,EAqBO,MAAMikC,OAAyB5zB,mBAAgB,IAAM,IAAIqzB,SCrHzD,MAAM28C,aAAanwE,OACtB7D,YAAY8O,KAAMmlE,MACdh0E,QACAhO,KAAK2Q,SAAW,MAChB3Q,KAAK0Q,UAAY,MACjBR,MAAM2M,MACN,MAAMmG,IAAM1R,UAAQ0wE,MACpBhiF,KAAKiiF,MAAQplE,KAAKzM,SAClB,UAAWpQ,KAAKiiF,MAAM/vE,SAAW,WAC7B,MAAM,IAAI5W,MAAM,uDACpB0E,KAAKsQ,SAAWtQ,KAAKiiF,MAAM3xE,SAC3BtQ,KAAKqQ,UAAYrQ,KAAKiiF,MAAM5xE,UAC5B,MAAMC,SAAWtQ,KAAKsQ,SACtB,MAAMoB,IAAM,IAAI7W,WAAWyV,UAE3BoB,IAAInO,IAAIyf,IAAI9nB,OAASoV,SAAWuM,KAAKzM,SAAS8B,OAAO8Q,KAAK7Q,SAAW6Q,KACrE,IAAK,IAAIhoB,EAAI,EAAGA,EAAI0W,IAAIxW,OAAQF,IAC5B0W,IAAI1W,IAAM,GACdgF,KAAKiiF,MAAM/vE,OAAOR,KAElB1R,KAAKkiF,MAAQrlE,KAAKzM,SAElB,IAAK,IAAIpV,EAAI,EAAGA,EAAI0W,IAAIxW,OAAQF,IAC5B0W,IAAI1W,IAAM,GAAO,GACrBgF,KAAKkiF,MAAMhwE,OAAOR,KAClBA,IAAIhQ,KAAK,EACjB,CACIwQ,OAAO7R,KACHkQ,UAAQvQ,MACRA,KAAKiiF,MAAM/vE,OAAO7R,KAClB,OAAOL,IACf,CACIuT,WAAWrL,KACPqI,UAAQvQ,MACRgQ,SAAO9H,IAAKlI,KAAKqQ,WACjBrQ,KAAK2Q,SAAW,KAChB3Q,KAAKiiF,MAAM1uE,WAAWrL,KACtBlI,KAAKkiF,MAAMhwE,OAAOhK,KAClBlI,KAAKkiF,MAAM3uE,WAAWrL,KACtBlI,KAAK2T,SACb,CACIxB,SACI,MAAMjK,IAAM,IAAIrN,WAAWmF,KAAKkiF,MAAM7xE,WACtCrQ,KAAKuT,WAAWrL,KAChB,OAAOA,GACf,CACI4J,WAAW8B,IAEPA,KAAOA,GAAKnU,OAAO2Q,OAAO3Q,OAAOiuD,eAAe1tD,MAAO,CAAA,IACvD,MAAMkiF,MAAEA,MAAKD,MAAEA,MAAKtxE,SAAEA,SAAQD,UAAEA,UAASJ,SAAEA,SAAQD,UAAEA,WAAcrQ,KACnE4T,GAAKA,GACLA,GAAGjD,SAAWA,SACdiD,GAAGlD,UAAYA,UACfkD,GAAGtD,SAAWA,SACdsD,GAAGvD,UAAYA,UACfuD,GAAGsuE,MAAQA,MAAMpwE,WAAW8B,GAAGsuE,OAC/BtuE,GAAGquE,MAAQA,MAAMnwE,WAAW8B,GAAGquE,OAC/B,OAAOruE,EACf,CACID,UACI3T,KAAK0Q,UAAY,KACjB1Q,KAAKkiF,MAAMvuE,UACX3T,KAAKiiF,MAAMtuE,SACnB,EAYO,MAAMwuE,KAAO,CAACtlE,KAAMmG,IAAK3U,UAAY,IAAI0zE,KAAKllE,KAAMmG,KAAK9Q,OAAO7D,SAAS8D,SAChFgwE,KAAK/xE,OAAS,CAACyM,KAAMmG,MAAQ,IAAI++D,KAAKllE,KAAMmG;uECzE5C,SAASo/D,mBAAmB1hE,MACxB,GAAIA,KAAK2hE,OAASpiF,UACd2Y,MAAM,OAAQ8H,KAAK2hE,MACvB,GAAI3hE,KAAK+G,UAAYxnB,UACjB2Y,MAAM,UAAW8H,KAAK+G,QAC9B,CACA,SAAS66D,kBAAkB57D,OACvB,MAAMhG,KAAO+F,cAAcC,OAC3BM,eAAkBtG,KAAM,CACpB5d,EAAG,QACH1B,EAAG,SACJ,CACCmhF,yBAA0B,QAC1BC,eAAgB,UAChB52D,cAAe,WACfC,cAAe,WACf42D,mBAAoB,UACpB//D,UAAW,WACXpR,QAAS,aAEb,MAAMoxE,KAAEA,KAAI/lE,GAAEA,GAAE7Z,EAAEA,GAAM4d,KACxB,GAAIgiE,KAAM,CACN,IAAK/lE,GAAGwC,IAAIrc,EAAG6Z,GAAG+C,MAAO,CACrB,MAAM,IAAIpkB,MAAM,6EAC5B,CACQ,UAAWonF,OAAS,iBACTA,KAAKC,OAAS,iBACdD,KAAKE,cAAgB,WAAY,CACxC,MAAM,IAAItnF,MAAM,wEAC5B,CACA,CACI,OAAOmE,OAAOqiB,OAAO,IAAKpB,MAC9B,CACA,MAAQtG,gBAAiByoE,IAAKhpE,WAAYipE,KAAQC,GAQ3C,MAAMC,IAAM,CAEfC,IAAK,MAAMC,eAAe5nF,MACtByS,YAAY3Q,EAAI,IACZ4Q,MAAM5Q,EAClB,GAGI+lF,KAAM,CACF9xE,OAAQ,CAACklC,IAAK7zC,QACV,MAAQugF,IAAKv1E,GAAMs1E,IACnB,GAAIzsC,IAAM,GAAKA,IAAM,IACjB,MAAM,IAAI7oC,EAAE,yBAChB,GAAIhL,KAAKxH,OAAS,EACd,MAAM,IAAIwS,EAAE,6BAChB,MAAM01E,QAAU1gF,KAAKxH,OAAS,EAC9B,MAAMD,IAAMooF,oBAAuBD,SACnC,GAAKnoF,IAAIC,OAAS,EAAK,IACnB,MAAM,IAAIwS,EAAE,wCAEhB,MAAM41E,OAASF,QAAU,IAAMC,oBAAwBpoF,IAAIC,OAAS,EAAK,KAAO,GAChF,MAAMq5B,EAAI8uD,oBAAuB9sC,KACjC,OAAOhiB,EAAI+uD,OAASroF,IAAMyH,IAAI,EAGlCiiC,OAAO4R,IAAK7zC,MACR,MAAQugF,IAAKv1E,GAAMs1E,IACnB,IAAI1/E,IAAM,EACV,GAAIizC,IAAM,GAAKA,IAAM,IACjB,MAAM,IAAI7oC,EAAE,yBAChB,GAAIhL,KAAKxH,OAAS,GAAKwH,KAAKY,SAAWizC,IACnC,MAAM,IAAI7oC,EAAE,yBAChB,MAAM/D,MAAQjH,KAAKY,OACnB,MAAMigF,UAAY55E,MAAQ,KAC1B,IAAIzO,OAAS,EACb,IAAKqoF,OACDroF,OAASyO,UACR,CAED,MAAM25E,OAAS35E,MAAQ,IACvB,IAAK25E,OACD,MAAM,IAAI51E,EAAE,qDAChB,GAAI41E,OAAS,EACT,MAAM,IAAI51E,EAAE,4CAChB,MAAM81E,YAAc9gF,KAAK4F,SAAShF,IAAKA,IAAMggF,QAC7C,GAAIE,YAAYtoF,SAAWooF,OACvB,MAAM,IAAI51E,EAAE,yCAChB,GAAI81E,YAAY,KAAO,EACnB,MAAM,IAAI91E,EAAE,wCAChB,IAAK,MAAMtM,KAAKoiF,YACZtoF,OAAUA,QAAU,EAAKkG,EAC7BkC,KAAOggF,OACP,GAAIpoF,OAAS,IACT,MAAM,IAAIwS,EAAE,yCAChC,CACY,MAAMiO,EAAIjZ,KAAK4F,SAAShF,IAAKA,IAAMpI,QACnC,GAAIygB,EAAEzgB,SAAWA,OACb,MAAM,IAAIwS,EAAE,kCAChB,MAAO,CAAEiO,IAAG9I,EAAGnQ,KAAK4F,SAAShF,IAAMpI,QACtC,GAMLuoF,KAAM,CACFpyE,OAAOrV,KACH,MAAQinF,IAAKv1E,GAAMs1E,IACnB,GAAIhnF,IAAMwc,IACN,MAAM,IAAI9K,EAAE,8CAChB,IAAIwL,IAAMmqE,oBAAuBrnF,KAEjC,GAAIqK,OAAOI,SAASyS,IAAI,GAAI,IAAM,EAC9BA,IAAM,KAAOA,IACjB,GAAIA,IAAIhe,OAAS,EACb,MAAM,IAAIwS,EAAE,kDAChB,OAAOwL,GACV,EACDyrB,OAAOjiC,MACH,MAAQugF,IAAKv1E,GAAMs1E,IACnB,GAAItgF,KAAK,GAAK,IACV,MAAM,IAAIgL,EAAE,uCAChB,GAAIhL,KAAK,KAAO,KAAUA,KAAK,GAAK,KAChC,MAAM,IAAIgL,EAAE,uDAChB,OAAOm1E,IAAIngF,KACd,GAELghF,MAAMxqE,KAEF,MAAQ+pE,IAAKv1E,EAAG+1E,KAAME,IAAKR,KAAMS,KAAQZ,IACzC,MAAMtgF,YAAcwW,MAAQ,SAAW4pE,IAAI5pE,KAAOA,IAClD2qE,SAAUnhF,MACV,MAAQiZ,EAAGmoE,SAAUjxE,EAAGkxE,cAAiBH,IAAIj/C,OAAO,GAAMjiC,MAC1D,GAAIqhF,aAAa7oF,OACb,MAAM,IAAIwS,EAAE,+CAChB,MAAQiO,EAAGqoE,OAAQnxE,EAAGoxE,YAAeL,IAAIj/C,OAAO,EAAMm/C,UACtD,MAAQnoE,EAAGuoE,OAAQrxE,EAAGsxE,YAAeP,IAAIj/C,OAAO,EAAMs/C,YACtD,GAAIE,WAAWjpF,OACX,MAAM,IAAIwS,EAAE,+CAChB,MAAO,CAAE8Q,EAAGmlE,IAAIh/C,OAAOq/C,QAAStmF,EAAGimF,IAAIh/C,OAAOu/C,QACjD,EACDE,WAAWz2D,KACP,MAAQw1D,KAAMS,IAAKH,KAAME,KAAQX,IACjC,MAAMqB,GAAKT,IAAIvyE,OAAO,EAAMsyE,IAAItyE,OAAOsc,IAAInP,IAC3C,MAAM8lE,GAAKV,IAAIvyE,OAAO,EAAMsyE,IAAItyE,OAAOsc,IAAIjwB,IAC3C,MAAM86C,IAAM6rC,GAAKC,GACjB,OAAOV,IAAIvyE,OAAO,GAAMmnC,IAC3B,GAIA,MAAChgC,IAAMxO,OAAO,GAAIyO,MAAMzO,OAAO,GAAUA,OAAO,GAAG,MAAC2T,IAAM3T,OAAO,GAAUA,OAAO,GAChF,SAASu6E,kBAAkB7jE,MAC9B,MAAM6G,MAAQ+6D,kBAAkB5hE,MAChC,MAAM/D,GAAEA,IAAO4K,MACf,MAAMM,GAAK28D,MAAUj9D,MAAMjjB,EAAGijB,MAAMhG,YACpC,MAAMjQ,QAAUiW,MAAMjW,SAC1B,EAAUmzE,GAAIn4D,MAAOo4D,iBACT,MAAM5hF,EAAIwpB,MAAM1C,WAChB,OAAOyD,YAAexyB,WAAW6F,KAAK,CAAC,IAAQic,GAAGrL,QAAQxO,EAAEC,GAAI4Z,GAAGrL,QAAQxO,EAAEE,GAChF,GACL,MAAM0f,UAAY6E,MAAM7E,WACnB,CAACta,QAEE,MAAMu8E,KAAOv8E,MAAME,SAAS,GAE5B,MAAMvF,EAAI4Z,GAAG+F,UAAUiiE,KAAKr8E,SAAS,EAAGqU,GAAG6D,QAC3C,MAAMxd,EAAI2Z,GAAG+F,UAAUiiE,KAAKr8E,SAASqU,GAAG6D,MAAO,EAAI7D,GAAG6D,QACtD,MAAO,CAAEzd,IAAGC,IACf,GAKL,SAAS4hF,oBAAoB7hF,GACzB,MAAMD,EAAEA,EAAC1B,EAAEA,GAAMmmB,MACjB,MAAMoH,GAAKhS,GAAGyC,IAAIrc,GAClB,MAAM8hF,GAAKloE,GAAG/T,IAAI+lB,GAAI5rB,GACtB,OAAO4Z,GAAGxH,IAAIwH,GAAGxH,IAAI0vE,GAAIloE,GAAG/T,IAAI7F,EAAGD,IAAK1B,EAChD,CAKI,IAAKub,GAAGwC,IAAIxC,GAAGyC,IAAImI,MAAMX,IAAKg+D,oBAAoBr9D,MAAMZ,KACpD,MAAM,IAAIrrB,MAAM,+CAEpB,SAASwpF,mBAAmB9oF,KACxB,OAAO+oF,QAAW/oF,IAAKyc,MAAK8O,MAAMjjB,EAC1C,CAGI,SAAS0gF,uBAAuBhiE,KAC5B,MAAQu/D,yBAA0BtyE,QAAOwR,YAAEA,YAAW+gE,eAAEA,eAAgBl+E,EAAGi3D,GAAMh0C,MACjF,GAAItX,gBAAkB+S,MAAQ,SAAU,CACpC,GAAIiiE,UAAWjiE,KACXA,IAAM0J,WAAc1J,KAExB,UAAWA,MAAQ,WAAa/S,QAAQ9J,SAAS6c,IAAI9nB,QACjD,MAAM,IAAII,MAAM,uBACpB0nB,IAAMA,IAAIhK,SAASyI,YAAc,EAAG,IAChD,CACQ,IAAIzlB,IACJ,IACIA,WACWgnB,MAAQ,SACTA,IACAkiE,gBAAmBxqE,YAAY,cAAesI,IAAKvB,aACzE,CACQ,MAAOniB,OACH,MAAM,IAAIhE,MAAM,wCAA0CmmB,YAAc,sBAAwBuB,IAC5G,CACQ,GAAIw/D,eACAxmF,IAAMmpF,IAAQnpF,IAAKu/D,GACvBtzC,SAAY,cAAejsB,IAAKyc,MAAK8iD,GACrC,OAAOv/D,GACf,CACI,SAASopF,eAAej9D,OACpB,KAAMA,iBAAiBC,OACnB,MAAM,IAAI9sB,MAAM,2BAC5B,CAKI,MAAM+sB,aAAe9K,UAAS,CAACsD,EAAGyH,MAC9B,MAAQ+8D,GAAItiF,EAAGuiF,GAAItiF,EAAGuiF,GAAI78D,GAAM7H,EAEhC,GAAIlE,GAAGwC,IAAIuJ,EAAG/L,GAAG6C,KACb,MAAO,CAAEzc,IAAGC,KAChB,MAAMke,IAAML,EAAEK,MAGd,GAAIoH,IAAM,KACNA,GAAKpH,IAAMvE,GAAG6C,IAAM7C,GAAGyE,IAAIsH,GAC/B,MAAMC,GAAKhM,GAAG/T,IAAI7F,EAAGulB,IACrB,MAAMM,GAAKjM,GAAG/T,IAAI5F,EAAGslB,IACrB,MAAMO,GAAKlM,GAAG/T,IAAI8f,EAAGJ,IACrB,GAAIpH,IACA,MAAO,CAAEne,EAAG4Z,GAAG+C,KAAM1c,EAAG2Z,GAAG+C,MAC/B,IAAK/C,GAAGwC,IAAI0J,GAAIlM,GAAG6C,KACf,MAAM,IAAIlkB,MAAM,oBACpB,MAAO,CAAEyH,EAAG4lB,GAAI3lB,EAAG4lB,GAAI,IAI3B,MAAME,gBAAkBvL,UAAUsD,IAC9B,GAAIA,EAAEK,MAAO,CAIT,GAAIqG,MAAMk7D,qBAAuB9lE,GAAGuE,IAAIL,EAAEykE,IACtC,OACJ,MAAM,IAAIhqF,MAAM,kBAC5B,CAEQ,MAAMyH,EAAEA,EAACC,EAAEA,GAAM6d,EAAE+I,WAEnB,IAAKjN,GAAGC,QAAQ7Z,KAAO4Z,GAAGC,QAAQ5Z,GAC9B,MAAM,IAAI1H,MAAM,4BACpB,MAAMkuB,KAAO7M,GAAGyC,IAAIpc,GACpB,MAAMymB,MAAQm7D,oBAAoB7hF,GAClC,IAAK4Z,GAAGwC,IAAIqK,KAAMC,OACd,MAAM,IAAInuB,MAAM,qCACpB,IAAKulB,EAAE+K,gBACH,MAAM,IAAItwB,MAAM,0CACpB,OAAO,IAAI,IAOf,MAAM8sB,MACFra,YAAYs3E,GAAIC,GAAIC,IAChBvlF,KAAKqlF,GAAKA,GACVrlF,KAAKslF,GAAKA,GACVtlF,KAAKulF,GAAKA,GACV,GAAIF,IAAM,OAAS1oE,GAAGC,QAAQyoE,IAC1B,MAAM,IAAI/pF,MAAM,cACpB,GAAIgqF,IAAM,OAAS3oE,GAAGC,QAAQ0oE,IAC1B,MAAM,IAAIhqF,MAAM,cACpB,GAAIiqF,IAAM,OAAS5oE,GAAGC,QAAQ2oE,IAC1B,MAAM,IAAIjqF,MAAM,cACpBmE,OAAOqiB,OAAO9hB,KAC1B,CAGQ6pB,kBAAkBhJ,GACd,MAAM9d,EAAEA,EAACC,EAAEA,GAAM6d,GAAK,CAAE,EACxB,IAAKA,IAAMlE,GAAGC,QAAQ7Z,KAAO4Z,GAAGC,QAAQ5Z,GACpC,MAAM,IAAI1H,MAAM,wBACpB,GAAIulB,aAAauH,MACb,MAAM,IAAI9sB,MAAM,gCACpB,MAAM4lB,IAAOlmB,GAAM2hB,GAAGwC,IAAInkB,EAAG2hB,GAAG+C,MAEhC,GAAIwB,IAAIne,IAAMme,IAAIle,GACd,OAAOolB,MAAM1I,KACjB,OAAO,IAAI0I,MAAMrlB,EAAGC,EAAG2Z,GAAG6C,IACtC,CACYzc,QACA,OAAO/C,KAAK4pB,WAAW7mB,CACnC,CACYC,QACA,OAAOhD,KAAK4pB,WAAW5mB,CACnC,CAOQ6mB,kBAAkB/F,QACd,MAAMgG,MAAQnN,GAAG6F,YAAYsB,OAAOxN,KAAKuK,GAAMA,EAAE0kE,MACjD,OAAOzhE,OAAOxN,KAAI,CAACuK,EAAG7lB,IAAM6lB,EAAE+I,SAASE,MAAM9uB,MAAKsb,IAAI8R,MAAM2B,WACxE,CAKQF,eAAe3Q,KACX,MAAMyF,EAAIyJ,MAAM2B,WAAWrH,UAAUhI,YAAY,WAAYxB,OAC7DyF,EAAEuL,iBACF,OAAOvL,CACnB,CAEQkL,sBAAsB81D,YAClB,OAAOv3D,MAAMtD,KAAK0G,SAASw5D,uBAAuBrF,YAC9D,CAEQ91D,WAAW/F,OAAQG,SACf,OAAOgC,UAAUmC,MAAOP,GAAI/D,OAAQG,QAChD,CAEQ+F,eAAepG,YACXqG,KAAKlE,cAAc/lB,KAAM4jB,WACrC,CAEQsG,iBACIpB,gBAAgB9oB,KAC5B,CACQwlF,WACI,MAAMxiF,EAAEA,GAAMhD,KAAK4pB,WACnB,GAAIjN,GAAGoF,MACH,OAAQpF,GAAGoF,MAAM/e,GACrB,MAAM,IAAI1H,MAAM,8BAC5B,CAIQsJ,OAAOujB,OACHi9D,eAAej9D,OACf,MAAQk9D,GAAIl7D,GAAIm7D,GAAIl7D,GAAIm7D,GAAIl7D,IAAOrqB,KACnC,MAAQqlF,GAAIl8D,GAAIm8D,GAAIl8D,GAAIm8D,GAAIl8D,IAAOlB,MACnC,MAAMs9D,GAAK9oE,GAAGwC,IAAIxC,GAAG/T,IAAIuhB,GAAId,IAAK1M,GAAG/T,IAAIugB,GAAIkB,KAC7C,MAAMq7D,GAAK/oE,GAAGwC,IAAIxC,GAAG/T,IAAIwhB,GAAIf,IAAK1M,GAAG/T,IAAIwgB,GAAIiB,KAC7C,OAAOo7D,IAAMC,EACzB,CAIQpiE,SACI,OAAO,IAAI8E,MAAMpoB,KAAKqlF,GAAI1oE,GAAG4C,IAAIvf,KAAKslF,IAAKtlF,KAAKulF,GAC5D,CAKQ9gE,SACI,MAAM3hB,EAAEA,EAAC1B,EAAEA,GAAMmmB,MACjB,MAAM8R,GAAK1c,GAAG/T,IAAIxH,EAAGuc,KACrB,MAAQ0nE,GAAIl7D,GAAIm7D,GAAIl7D,GAAIm7D,GAAIl7D,IAAOrqB,KACnC,IAAIgrB,GAAKrO,GAAG+C,KAAMuL,GAAKtO,GAAG+C,KAAMyL,GAAKxO,GAAG+C,KACxC,IAAIimE,GAAKhpE,GAAG/T,IAAIuhB,GAAIA,IACpB,IAAIy7D,GAAKjpE,GAAG/T,IAAIwhB,GAAIA,IACpB,IAAIzK,GAAKhD,GAAG/T,IAAIyhB,GAAIA,IACpB,IAAIw7D,GAAKlpE,GAAG/T,IAAIuhB,GAAIC,IACpBy7D,GAAKlpE,GAAGxH,IAAI0wE,GAAIA,IAChB16D,GAAKxO,GAAG/T,IAAIuhB,GAAIE,IAChBc,GAAKxO,GAAGxH,IAAIgW,GAAIA,IAChBH,GAAKrO,GAAG/T,IAAI9F,EAAGqoB,IACfF,GAAKtO,GAAG/T,IAAIywB,GAAI1Z,IAChBsL,GAAKtO,GAAGxH,IAAI6V,GAAIC,IAChBD,GAAKrO,GAAGrQ,IAAIs5E,GAAI36D,IAChBA,GAAKtO,GAAGxH,IAAIywE,GAAI36D,IAChBA,GAAKtO,GAAG/T,IAAIoiB,GAAIC,IAChBD,GAAKrO,GAAG/T,IAAIi9E,GAAI76D,IAChBG,GAAKxO,GAAG/T,IAAIywB,GAAIlO,IAChBxL,GAAKhD,GAAG/T,IAAI9F,EAAG6c,IACfkmE,GAAKlpE,GAAGrQ,IAAIq5E,GAAIhmE,IAChBkmE,GAAKlpE,GAAG/T,IAAI9F,EAAG+iF,IACfA,GAAKlpE,GAAGxH,IAAI0wE,GAAI16D,IAChBA,GAAKxO,GAAGxH,IAAIwwE,GAAIA,IAChBA,GAAKhpE,GAAGxH,IAAIgW,GAAIw6D,IAChBA,GAAKhpE,GAAGxH,IAAIwwE,GAAIhmE,IAChBgmE,GAAKhpE,GAAG/T,IAAI+8E,GAAIE,IAChB56D,GAAKtO,GAAGxH,IAAI8V,GAAI06D,IAChBhmE,GAAKhD,GAAG/T,IAAIwhB,GAAIC,IAChB1K,GAAKhD,GAAGxH,IAAIwK,GAAIA,IAChBgmE,GAAKhpE,GAAG/T,IAAI+W,GAAIkmE,IAChB76D,GAAKrO,GAAGrQ,IAAI0e,GAAI26D,IAChBx6D,GAAKxO,GAAG/T,IAAI+W,GAAIimE,IAChBz6D,GAAKxO,GAAGxH,IAAIgW,GAAIA,IAChBA,GAAKxO,GAAGxH,IAAIgW,GAAIA,IAChB,OAAO,IAAI/C,MAAM4C,GAAIC,GAAIE,GACrC,CAKQhW,IAAIgT,OACAi9D,eAAej9D,OACf,MAAQk9D,GAAIl7D,GAAIm7D,GAAIl7D,GAAIm7D,GAAIl7D,IAAOrqB,KACnC,MAAQqlF,GAAIl8D,GAAIm8D,GAAIl8D,GAAIm8D,GAAIl8D,IAAOlB,MACnC,IAAI6C,GAAKrO,GAAG+C,KAAMuL,GAAKtO,GAAG+C,KAAMyL,GAAKxO,GAAG+C,KACxC,MAAM5c,EAAIykB,MAAMzkB,EAChB,MAAMu2B,GAAK1c,GAAG/T,IAAI2e,MAAMnmB,EAAGuc,KAC3B,IAAIgoE,GAAKhpE,GAAG/T,IAAIuhB,GAAIhB,IACpB,IAAIy8D,GAAKjpE,GAAG/T,IAAIwhB,GAAIhB,IACpB,IAAIzJ,GAAKhD,GAAG/T,IAAIyhB,GAAIhB,IACpB,IAAIw8D,GAAKlpE,GAAGxH,IAAIgV,GAAIC,IACpB,IAAI07D,GAAKnpE,GAAGxH,IAAIgU,GAAIC,IACpBy8D,GAAKlpE,GAAG/T,IAAIi9E,GAAIC,IAChBA,GAAKnpE,GAAGxH,IAAIwwE,GAAIC,IAChBC,GAAKlpE,GAAGrQ,IAAIu5E,GAAIC,IAChBA,GAAKnpE,GAAGxH,IAAIgV,GAAIE,IAChB,IAAI07D,GAAKppE,GAAGxH,IAAIgU,GAAIE,IACpBy8D,GAAKnpE,GAAG/T,IAAIk9E,GAAIC,IAChBA,GAAKppE,GAAGxH,IAAIwwE,GAAIhmE,IAChBmmE,GAAKnpE,GAAGrQ,IAAIw5E,GAAIC,IAChBA,GAAKppE,GAAGxH,IAAIiV,GAAIC,IAChBW,GAAKrO,GAAGxH,IAAIiU,GAAIC,IAChB08D,GAAKppE,GAAG/T,IAAIm9E,GAAI/6D,IAChBA,GAAKrO,GAAGxH,IAAIywE,GAAIjmE,IAChBomE,GAAKppE,GAAGrQ,IAAIy5E,GAAI/6D,IAChBG,GAAKxO,GAAG/T,IAAI9F,EAAGgjF,IACf96D,GAAKrO,GAAG/T,IAAIywB,GAAI1Z,IAChBwL,GAAKxO,GAAGxH,IAAI6V,GAAIG,IAChBH,GAAKrO,GAAGrQ,IAAIs5E,GAAIz6D,IAChBA,GAAKxO,GAAGxH,IAAIywE,GAAIz6D,IAChBF,GAAKtO,GAAG/T,IAAIoiB,GAAIG,IAChBy6D,GAAKjpE,GAAGxH,IAAIwwE,GAAIA,IAChBC,GAAKjpE,GAAGxH,IAAIywE,GAAID,IAChBhmE,GAAKhD,GAAG/T,IAAI9F,EAAG6c,IACfmmE,GAAKnpE,GAAG/T,IAAIywB,GAAIysD,IAChBF,GAAKjpE,GAAGxH,IAAIywE,GAAIjmE,IAChBA,GAAKhD,GAAGrQ,IAAIq5E,GAAIhmE,IAChBA,GAAKhD,GAAG/T,IAAI9F,EAAG6c,IACfmmE,GAAKnpE,GAAGxH,IAAI2wE,GAAInmE,IAChBgmE,GAAKhpE,GAAG/T,IAAIg9E,GAAIE,IAChB76D,GAAKtO,GAAGxH,IAAI8V,GAAI06D,IAChBA,GAAKhpE,GAAG/T,IAAIm9E,GAAID,IAChB96D,GAAKrO,GAAG/T,IAAIi9E,GAAI76D,IAChBA,GAAKrO,GAAGrQ,IAAI0e,GAAI26D,IAChBA,GAAKhpE,GAAG/T,IAAIi9E,GAAID,IAChBz6D,GAAKxO,GAAG/T,IAAIm9E,GAAI56D,IAChBA,GAAKxO,GAAGxH,IAAIgW,GAAIw6D,IAChB,OAAO,IAAIv9D,MAAM4C,GAAIC,GAAIE,GACrC,CACQG,SAASnD,OACL,OAAOnoB,KAAKmV,IAAIgT,MAAM7E,SAClC,CACQpC,MACI,OAAOlhB,KAAK4E,OAAOwjB,MAAM1I,KACrC,CACQ2E,KAAK/f,GACD,OAAO2lB,KAAKrE,WAAW5lB,KAAMsE,EAAG8jB,MAAMmD,WAClD,CAMQE,eAAeu6D,IACX,MAAMtD,KAAEA,KAAMp+E,EAAGi3D,GAAMh0C,MACvBU,SAAY,SAAU+9D,GAAIxtE,IAAK+iD,GAC/B,MAAM7vC,EAAItD,MAAM1I,KAChB,GAAIsmE,KAAOxtE,IACP,OAAOkT,EACX,GAAI1rB,KAAKkhB,OAAS8kE,KAAOvtE,MACrB,OAAOzY,KAEX,IAAK0iF,MAAQz4D,KAAK3F,eAAetkB,MAC7B,OAAOiqB,KAAKpE,iBAAiB7lB,KAAMgmF,GAAI59D,MAAMmD,YAEjD,IAAI06D,MAAEA,MAAKC,GAAEA,GAAEC,MAAEA,MAAK59C,GAAEA,IAAOm6C,KAAKE,YAAYoD,IAChD,IAAII,IAAM16D,EACV,IAAI26D,IAAM36D,EACV,IAAIjuB,EAAIuC,KACR,MAAOkmF,GAAK1tE,KAAO+vB,GAAK/vB,IAAK,CACzB,GAAI0tE,GAAKztE,MACL2tE,IAAMA,IAAIjxE,IAAI1X,GAClB,GAAI8qC,GAAK9vB,MACL4tE,IAAMA,IAAIlxE,IAAI1X,GAClBA,EAAIA,EAAEgnB,SACNyhE,KAAOztE,MACP8vB,KAAO9vB,KACvB,CACY,GAAIwtE,MACAG,IAAMA,IAAI9iE,SACd,GAAI6iE,MACAE,IAAMA,IAAI/iE,SACd+iE,IAAM,IAAIj+D,MAAMzL,GAAG/T,IAAIy9E,IAAIhB,GAAI3C,KAAKC,MAAO0D,IAAIf,GAAIe,IAAId,IACvD,OAAOa,IAAIjxE,IAAIkxE,IAC3B,CAUQ76D,SAASlF,QACL,MAAMo8D,KAAEA,KAAMp+E,EAAGi3D,GAAMh0C,MACvBU,SAAY,SAAU3B,OAAQ7N,MAAK8iD,GACnC,IAAIjvC,MAAOg6D,KACX,GAAI5D,KAAM,CACN,MAAMuD,MAAEA,MAAKC,GAAEA,GAAEC,MAAEA,MAAK59C,GAAEA,IAAOm6C,KAAKE,YAAYt8D,QAClD,IAAMzF,EAAGulE,IAAK1sE,EAAG6sE,KAAQvmF,KAAKqkB,KAAK6hE,IACnC,IAAMrlE,EAAGwlE,IAAK3sE,EAAG8sE,KAAQxmF,KAAKqkB,KAAKkkB,IACnC69C,IAAMn8D,KAAK7G,gBAAgB6iE,MAAOG,KAClCC,IAAMp8D,KAAK7G,gBAAgB+iE,MAAOE,KAClCA,IAAM,IAAIj+D,MAAMzL,GAAG/T,IAAIy9E,IAAIhB,GAAI3C,KAAKC,MAAO0D,IAAIf,GAAIe,IAAId,IACvDj5D,MAAQ85D,IAAIjxE,IAAIkxE,KAChBC,KAAOC,IAAIpxE,IAAIqxE,IAC/B,KACiB,CACD,MAAM3lE,EAAEA,EAACnH,EAAEA,GAAM1Z,KAAKqkB,KAAKiC,QAC3BgG,MAAQzL,EACRylE,KAAO5sE,CACvB,CAEY,OAAO0O,MAAMmD,WAAW,CAACe,MAAOg6D,OAAO,EACnD,CAOQG,qBAAqB5nE,EAAG/b,EAAG1B,GACvB,MAAM0pB,EAAI1C,MAAMtD,KAChB,MAAMlc,IAAM,CAAC+V,EAAG7b,IACVA,IAAM0V,KAAO1V,IAAM2V,QAAQkG,EAAE/Z,OAAOkmB,GAAKnM,EAAE8M,eAAe3oB,GAAK6b,EAAE6M,SAAS1oB,GAChF,MAAM2O,IAAM7I,IAAI5I,KAAM8C,GAAGqS,IAAIvM,IAAIiW,EAAGzd,IACpC,OAAOqQ,IAAIyP,MAAQjhB,UAAYwR,GAC3C,CAIQmY,SAAStB,IACL,OAAOD,aAAaroB,KAAMsoB,GACtC,CACQsD,gBACI,MAAQzb,EAAGwX,SAAQiE,cAAEA,eAAkBrE,MACvC,GAAII,WAAalP,MACb,OAAO,KACX,GAAImT,cACA,OAAOA,cAAcxD,MAAOpoB,MAChC,MAAM,IAAI1E,MAAM,+DAC5B,CACQuwB,gBACI,MAAQ1b,EAAGwX,SAAQkE,cAAEA,eAAkBtE,MACvC,GAAII,WAAalP,MACb,OAAOzY,KACX,GAAI6rB,cACA,OAAOA,cAAczD,MAAOpoB,MAChC,OAAOA,KAAKyrB,eAAelE,MAAMpX,EAC7C,CACQoc,WAAWm6D,aAAe,MACtB9tE,MAAM,eAAgB8tE,cACtB1mF,KAAKkqB,iBACL,OAAO5Y,QAAQ8W,MAAOpoB,KAAM0mF,aACxC,CACQj6D,MAAMi6D,aAAe,MACjB9tE,MAAM,eAAgB8tE,cACtB,OAAOh6D,WAAc1sB,KAAKusB,WAAWm6D,cACjD,EAEIt+D,MAAMtD,KAAO,IAAIsD,MAAMb,MAAMZ,GAAIY,MAAMX,GAAIjK,GAAG6C,KAC9C4I,MAAM1I,KAAO,IAAI0I,MAAMzL,GAAG+C,KAAM/C,GAAG6C,IAAK7C,GAAG+C,MAC3C,MAAMinE,MAAQp/D,MAAMhG,WACpB,MAAM0I,KAAO5F,KAAK+D,MAAOb,MAAMm7D,KAAO7kF,KAAK6jB,KAAKilE,MAAQ,GAAKA,OAE7D,MAAO,CACHp/D,YACAq/D,gBAAiBx+D,MACjB48D,8CACAJ,wCACAE,sCAER,CACA,SAAS/9D,aAAaL,OAClB,MAAMhG,KAAO+F,cAAcC,OAC3BM,eAAkBtG,KAAM,CACpB7D,KAAM,OACNslE,KAAM,WACN/vE,YAAa,YACd,CACCy0E,SAAU,WACVC,cAAe,WACfzE,KAAM,YAEV,OAAO5iF,OAAOqiB,OAAO,CAAEugE,KAAM,QAAS3hE,MAC1C,CAQO,SAASqmE,YAAYz/D,UACxB,MAAMC,MAAQR,aAAaO,UAC3B,MAAM3K,GAAEA,GAAIrY,EAAGkjB,aAAgBD,MAC/B,MAAMy/D,cAAgBrqE,GAAG6D,MAAQ,EACjC,MAAMymE,gBAAkB,EAAItqE,GAAG6D,MAAQ,EACvC,SAASmM,KAAK7pB,GACV,OAAOqiF,IAAQriF,EAAG0kB,YAC1B,CACI,SAAS0/D,KAAKpkF,GACV,OAAOqkF,OAAWrkF,EAAG0kB,YAC7B,CACI,MAAQo/D,gBAAiBx+D,MAAK48D,uBAAEA,uBAAsBJ,oBAAEA,oBAAmBE,mBAAEA,oBAAwBP,kBAAkB,IAChHh9D,MACHjW,QAAQmzE,GAAIn4D,MAAOo6D,cACf,MAAM5jF,EAAIwpB,MAAM1C,WAChB,MAAM7mB,EAAI4Z,GAAGrL,QAAQxO,EAAEC,GACvB,MAAMqkF,IAAM/5D,YACZzU,MAAM,eAAgB8tE,cACtB,GAAIA,aAAc,CACd,OAAOU,IAAIvsF,WAAW6F,KAAK,CAAC4rB,MAAMk5D,WAAa,EAAO,IAAQziF,EAC9E,KACiB,CACD,OAAOqkF,IAAIvsF,WAAW6F,KAAK,CAAC,IAAQqC,EAAG4Z,GAAGrL,QAAQxO,EAAEE,GACpE,CACS,EACD0f,UAAUta,OACN,MAAMnN,IAAMmN,MAAMlN,OAClB,MAAM4xB,KAAO1kB,MAAM,GACnB,MAAMu8E,KAAOv8E,MAAME,SAAS,GAE5B,GAAIrN,MAAQ+rF,gBAAkBl6D,OAAS,GAAQA,OAAS,GAAO,CAC3D,MAAM/pB,EAAImiF,gBAAmBP,MAC7B,IAAKI,QAAWhiF,EAAG0V,MAAKkE,GAAG2D,OACvB,MAAM,IAAIhlB,MAAM,yBACpB,MAAM2wB,GAAK24D,oBAAoB7hF,GAC/B,IAAIC,EACJ,IACIA,EAAI2Z,GAAG4F,KAAK0J,GAChC,CACgB,MAAOo7D,WACH,MAAMjG,OAASiG,qBAAqB/rF,MAAQ,KAAO+rF,UAAUh5E,QAAU,GACvE,MAAM,IAAI/S,MAAM,wBAA0B8lF,OAC9D,CACgB,MAAMkG,QAAUtkF,EAAIyV,SAASA,MAE7B,MAAM8uE,WAAaz6D,KAAO,KAAO,EACjC,GAAIy6D,YAAcD,OACdtkF,EAAI2Z,GAAG4C,IAAIvc,GACf,MAAO,CAAED,IAAGC,IAC5B,MACiB,GAAI/H,MAAQgsF,iBAAmBn6D,OAAS,EAAM,CAC/C,MAAM/pB,EAAI4Z,GAAG+F,UAAUiiE,KAAKr8E,SAAS,EAAGqU,GAAG6D,QAC3C,MAAMxd,EAAI2Z,GAAG+F,UAAUiiE,KAAKr8E,SAASqU,GAAG6D,MAAO,EAAI7D,GAAG6D,QACtD,MAAO,CAAEzd,IAAGC,IAC5B,KACiB,CACD,MAAMwkF,GAAKR,cACX,MAAMS,GAAKR,gBACX,MAAM,IAAI3rF,MAAM,qCAAuCksF,GAAK,qBAAuBC,GAAK,SAAWxsF,IACnH,CACS,IAEL,MAAMysF,cAAiB1rF,KAAQ0wB,WAAci7D,gBAAmB3rF,IAAKurB,MAAM9F,cAC3E,SAASmmE,sBAAsBvpE,QAC3B,MAAMwpE,KAAOrgE,aAAe/O,MAC5B,OAAO4F,OAASwpE,IACxB,CACI,SAASC,WAAWpqF,GAChB,OAAOkqF,sBAAsBlqF,GAAKivB,MAAMjvB,GAAKA,CACrD,CAEI,MAAMqqF,OAAS,CAAC3mF,EAAGV,KAAMkT,KAAOsxE,gBAAmB9jF,EAAEa,MAAMvB,KAAMkT,KAIjE,MAAMo0E,UACFj6E,YAAYyQ,EAAG9gB,EAAGuqF,UACdjoF,KAAKwe,EAAIA,EACTxe,KAAKtC,EAAIA,EACTsC,KAAKioF,SAAWA,SAChBjoF,KAAKkqB,gBACjB,CAEQL,mBAAmB3Q,KACf,MAAMrG,EAAI0U,MAAM9F,YAChBvI,IAAMwB,YAAY,mBAAoBxB,IAAKrG,EAAI,GAC/C,OAAO,IAAIm1E,UAAUD,OAAO7uE,IAAK,EAAGrG,GAAIk1E,OAAO7uE,IAAKrG,EAAG,EAAIA,GACvE,CAGQgX,eAAe3Q,KACX,MAAMsF,EAAEA,EAAC9gB,EAAEA,GAAMslF,IAAIU,MAAMhpE,YAAY,MAAOxB,MAC9C,OAAO,IAAI8uE,UAAUxpE,EAAG9gB,EACpC,CACQwsB,iBACIjC,SAAY,IAAKjoB,KAAKwe,EAAG/F,MAAK+O,aAC9BS,SAAY,IAAKjoB,KAAKtC,EAAG+a,MAAK+O,YAC1C,CACQ0gE,eAAeD,UACX,OAAO,IAAID,UAAUhoF,KAAKwe,EAAGxe,KAAKtC,EAAGuqF,SACjD,CACQE,iBAAiBC,SACb,MAAM5pE,EAAEA,EAAC9gB,EAAEA,EAAGuqF,SAAUI,KAAQroF,KAChC,MAAMmQ,EAAI22E,cAAcpsE,YAAY,UAAW0tE,UAC/C,GAAIC,KAAO,OAAS,CAAC,EAAG,EAAG,EAAG,GAAGliF,SAASkiF,KACtC,MAAM,IAAI/sF,MAAM,uBACpB,MAAMgtF,KAAOD,MAAQ,GAAKA,MAAQ,EAAI7pE,EAAI+I,MAAMjjB,EAAIka,EACpD,GAAI8pE,MAAQ3rE,GAAG2D,MACX,MAAM,IAAIhlB,MAAM,8BACpB,MAAMyxB,QAAUs7D,IAAM,KAAO,EAAI,KAAO,KACxC,MAAM76D,EAAIpF,MAAM0F,QAAQf,OAAS26D,cAAcY,OAC/C,MAAMC,GAAKrB,KAAKoB,MAChB,MAAME,GAAK77D,MAAMxc,EAAIo4E,IACrB,MAAME,GAAK97D,KAAKjvB,EAAI6qF,IACpB,MAAM1pE,EAAIuJ,MAAMtD,KAAK2hE,qBAAqBj5D,EAAGg7D,GAAIC,IACjD,IAAK5pE,EACD,MAAM,IAAIvjB,MAAM,qBACpBujB,EAAEqL,iBACF,OAAOrL,CACnB,CAEQ6pE,WACI,OAAOd,sBAAsB5nF,KAAKtC,EAC9C,CACQoqF,aACI,OAAO9nF,KAAK0oF,WAAa,IAAIV,UAAUhoF,KAAKwe,EAAGmO,MAAM3sB,KAAKtC,GAAIsC,KAAKioF,UAAYjoF,IAC3F,CAEQ2oF,gBACI,OAAOC,WAAc5oF,KAAK6oF,WACtC,CACQA,WACI,OAAO7F,IAAIoB,WAAW,CAAE5lE,EAAGxe,KAAKwe,EAAG9gB,EAAGsC,KAAKtC,GACvD,CAEQorF,oBACI,OAAOF,WAAc5oF,KAAK+oF,eACtC,CACQA,eACI,OAAOrB,cAAc1nF,KAAKwe,GAAKkpE,cAAc1nF,KAAKtC,EAC9D,EAEI,MAAMswB,MAAQ,CACVg7D,kBAAkBrJ,YACd,IACIqF,uBAAuBrF,YACvB,OAAO,IACvB,CACY,MAAOrgF,OACH,OAAO,KACvB,CACS,EACD0lF,uBAAwBA,uBAKxB/2D,iBAAkB,KACd,MAAM/yB,OAAS+tF,iBAAqB1hE,MAAMjjB,GAC1C,OAAO4kF,eAAmB3hE,MAAMnV,YAAYlX,QAASqsB,MAAMjjB,EAAE,EAUjE4pB,WAAWtK,WAAa,EAAG0I,MAAQlE,MAAMtD,MACrCwH,MAAMtC,eAAepG,YACrB0I,MAAMd,SAASxhB,OAAO,IACtB,OAAOsiB,KACV,GAQL,SAASW,aAAa0yD,WAAY+G,aAAe,MAC7C,OAAOt+D,MAAM+gE,eAAexJ,YAAYpzD,WAAWm6D,aAC3D,CAII,SAAS0C,UAAUzwE,MACf,MAAM9c,IAAMopF,UAAWtsE,MACvB,MAAM7T,WAAa6T,OAAS,SAC5B,MAAM1d,KAAOY,KAAOiJ,MAAQ6T,KAAKzd,OACjC,GAAIW,IACA,OAAOZ,MAAQ+rF,eAAiB/rF,MAAQgsF,gBAC5C,GAAIniF,IACA,OAAO7J,MAAQ,EAAI+rF,eAAiB/rF,MAAQ,EAAIgsF,gBACpD,GAAItuE,gBAAgByP,MAChB,OAAO,KACX,OAAO,KACf,CAWI,SAASihE,gBAAgBC,SAAUC,QAAS7C,aAAe,MACvD,GAAI0C,UAAUE,UACV,MAAM,IAAIhuF,MAAM,iCACpB,IAAK8tF,UAAUG,SACX,MAAM,IAAIjuF,MAAM,iCACpB,MAAM8F,EAAIgnB,MAAM0F,QAAQy7D,SACxB,OAAOnoF,EAAEoqB,SAASw5D,uBAAuBsE,WAAW/8D,WAAWm6D,aACvE,CAKI,MAAMG,SAAWt/D,MAAMs/D,UACnB,SAAUz+E,OAEN,GAAIA,MAAMlN,OAAS,KACf,MAAM,IAAII,MAAM,sBAGpB,MAAMU,IAAMkpF,gBAAmB98E,OAC/B,MAAM22B,MAAQ32B,MAAMlN,OAAS,EAAIqsB,MAAMhG,WACvC,OAAOwd,MAAQ,EAAI/iC,KAAOgO,OAAO+0B,OAAS/iC,GAC7C,EACL,MAAM8qF,cAAgBv/D,MAAMu/D,eACxB,SAAU1+E,OACN,OAAOukB,KAAKk6D,SAASz+E,OACxB,EAEL,MAAMohF,WAAaC,QAAWliE,MAAMhG,YAIpC,SAASmoE,WAAW1tF,KAChBisB,SAAY,WAAaV,MAAMhG,WAAYvlB,IAAKwc,IAAKgxE,YAErD,OAAO7B,gBAAmB3rF,IAAKurB,MAAM9F,YAC7C,CAMI,SAASkoE,QAAQvB,QAASzI,WAAYj/D,KAAOkpE,gBACzC,GAAI,CAAC,YAAa,aAAariC,MAAM3rC,GAAMA,KAAK8E,OAC5C,MAAM,IAAIplB,MAAM,uCACpB,MAAMuhB,KAAEA,KAAIzK,YAAEA,aAAgBmV,MAC9B,IAAI86D,KAAEA,KAAI56D,QAAEA,QAASoiE,aAAcC,KAAQppE,KAC3C,GAAI2hE,MAAQ,KACRA,KAAO,KACX+F,QAAU1tE,YAAY,UAAW0tE,SACjChG,mBAAmB1hE,MACnB,GAAI+G,QACA2gE,QAAU1tE,YAAY,oBAAqBmC,KAAKurE,UAIpD,MAAM2B,MAAQjD,cAAcsB,SAC5B,MAAM3qF,EAAIunF,uBAAuBrF,YACjC,MAAMqK,SAAW,CAACN,WAAWjsF,GAAIisF,WAAWK,QAE5C,GAAID,KAAO,MAAQA,MAAQ,MAAO,CAE9B,MAAM3sF,EAAI2sF,MAAQ,KAAO13E,YAAYuK,GAAG6D,OAASspE,IACjDE,SAAS1tF,KAAKoe,YAAY,eAAgBvd,GACtD,CACQ,MAAM4e,KAAOsR,eAAkB28D,UAC/B,MAAM5sF,EAAI2sF,MAEV,SAASE,MAAMC,QAEX,MAAMtuE,EAAIirE,SAASqD,QACnB,IAAKpF,mBAAmBlpE,GACpB,OACJ,MAAMuuE,GAAKjD,KAAKtrE,GAChB,MAAM2C,EAAI6J,MAAMtD,KAAK0G,SAAS5P,GAAGgO,WACjC,MAAMpL,EAAImO,KAAKpO,EAAExb,GACjB,GAAIyb,IAAMhG,IACN,OAIJ,MAAM9a,EAAIivB,KAAKw9D,GAAKx9D,KAAKvvB,EAAIohB,EAAI/gB,IACjC,GAAIC,IAAM8a,IACN,OACJ,IAAIyvE,UAAY1pE,EAAExb,IAAMyb,EAAI,EAAI,GAAKnY,OAAOkY,EAAEvb,EAAIyV,OAClD,IAAI2xE,MAAQ1sF,EACZ,GAAI2kF,MAAQuF,sBAAsBlqF,GAAI,CAClC0sF,MAAQtC,WAAWpqF,GACnBuqF,UAAY,CAC5B,CACY,OAAO,IAAID,UAAUxpE,EAAG4rE,MAAOnC,SAC3C,CACQ,MAAO,CAAElsE,UAAMkuE,YACvB,CACI,MAAML,eAAiB,CAAEvH,KAAM96D,MAAM86D,KAAM56D,QAAS,OACpD,MAAM4iE,eAAiB,CAAEhI,KAAM96D,MAAM86D,KAAM56D,QAAS,OAcpD,SAAS6F,KAAK86D,QAASh8D,QAAS1L,KAAOkpE,gBACnC,MAAM7tE,KAAEA,KAAIkuE,MAAEA,OAAUN,QAAQvB,QAASh8D,QAAS1L,MAClD,MAAMiK,EAAIpD,MACV,MAAM+iE,KAAOC,eAAkB5/D,EAAE9N,KAAKxM,UAAWsa,EAAElJ,YAAakJ,EAAEw3D,MAClE,OAAOmI,KAAKvuE,KAAMkuE,MAC1B,CAEI7hE,MAAMtD,KAAKkF,eAAe,GAe1B,SAAS0D,OAAOorB,UAAWsvC,QAASx6D,UAAWlN,KAAO2pE,gBAClD,MAAMG,GAAK1xC,UACXsvC,QAAU1tE,YAAY,UAAW0tE,SACjCx6D,UAAYlT,YAAY,YAAakT,WACrC,MAAMy0D,KAAEA,KAAI56D,QAAEA,QAAOgjE,OAAEA,QAAW/pE,KAElC0hE,mBAAmB1hE,MACnB,GAAI,WAAYA,KACZ,MAAM,IAAIplB,MAAM,sCACpB,GAAImvF,SAAWxqF,WAAawqF,SAAW,WAAaA,SAAW,MAC3D,MAAM,IAAInvF,MAAM,iCACpB,MAAMovF,aAAeF,KAAO,UAAYvF,UAAWuF,IACnD,MAAMG,OAASD,QACVD,eACMD,KAAO,UACdA,KAAO,aACAA,GAAGhsE,IAAM,iBACTgsE,GAAG9sF,IAAM,SACpB,IAAKgtF,QAAUC,MACX,MAAM,IAAIrvF,MAAM,4EACpB,IAAIsvF,KAAO3qF,UACX,IAAI0e,EACJ,IACI,GAAIgsE,MACAC,KAAO,IAAI5C,UAAUwC,GAAGhsE,EAAGgsE,GAAG9sF,GAClC,GAAIgtF,MAAO,CAGP,IACI,GAAID,SAAW,UACXG,KAAO5C,UAAU6C,QAAQL,GACjD,CACgB,MAAOM,UACH,KAAMA,oBAAoB9H,IAAIC,KAC1B,MAAM6H,QAC9B,CACgB,IAAKF,MAAQH,SAAW,MACpBG,KAAO5C,UAAU+C,YAAYP,GACjD,CACY7rE,EAAIyJ,MAAM0F,QAAQF,UAC9B,CACQ,MAAOtuB,OACH,OAAO,KACnB,CACQ,IAAKsrF,KACD,OAAO,MACX,GAAIvI,MAAQuI,KAAKlC,WACb,OAAO,MACX,GAAIjhE,QACA2gE,QAAU7gE,MAAM1K,KAAKurE,SACzB,MAAM5pE,EAAEA,EAAC9gB,EAAEA,GAAMktF,KACjB,MAAMz6E,EAAI22E,cAAcsB,SACxB,MAAM5xB,GAAK0wB,KAAKxpF,GAChB,MAAM8qF,GAAK77D,KAAKxc,EAAIqmD,IACpB,MAAMiyB,GAAK97D,KAAKnO,EAAIg4C,IACpB,MAAMhpC,EAAIpF,MAAMtD,KAAK2hE,qBAAqB9nE,EAAG6pE,GAAIC,KAAK7+D,WACtD,IAAK4D,EACD,OAAO,MACX,MAAM7R,EAAIgR,KAAKa,EAAEzqB,GACjB,OAAO4Y,IAAM6C,CACrB,CACI,MAAO,CACH+I,YACA0F,0BACAo8D,gCACA/7D,UACAI,cACAk5D,gBAAiBx+D,MACjB4/D,oBACAh6D,YAER;sECngCO,SAASg9D,QAAQnuE,MACpB,MAAO,CACHA,UACAslE,KAAM,CAACn/D,OAAQoK,OAAS+0D,KAAKtlE,KAAMmG,IAAKzR,iBAAe6b,OACvDhb,wBAER,CACO,SAAS64E,YAAY3jE,SAAU4jE,SAClC,MAAM96E,OAAUyM,MAASkqE,YAAY,IAAKz/D,YAAa0jE,QAAQnuE,QAC/D,OAAOpd,OAAOqiB,OAAO,IAAK1R,OAAO86E,SAAU96E,eAC/C;sECPA,MAAM+6E,WAAanhF,OAAO,sEAC1B,MAAMohF,WAAaphF,OAAO,sEAC1B,MAAMyO,IAAMzO,OAAO,GACnB,MAAM0O,IAAM1O,OAAO,GACnB,MAAMqhF,WAAa,CAACvoF,EAAG1B,KAAO0B,EAAI1B,EAAIsX,KAAOtX,EAK7C,SAASkqF,QAAQtoF,GACb,MAAM2b,EAAIwsE,WAEV,MAAMxtE,IAAM3T,OAAO,GAAIuhF,IAAMvhF,OAAO,GAAIwhF,KAAOxhF,OAAO,IAAKyhF,KAAOzhF,OAAO,IAEzE,MAAM0hF,KAAO1hF,OAAO,IAAK2hF,KAAO3hF,OAAO,IAAK4hF,KAAO5hF,OAAO,IAC1D,MAAM4kB,GAAM5rB,EAAIA,EAAIA,EAAK2b,EACzB,MAAM0a,GAAMzK,GAAKA,GAAK5rB,EAAK2b,EAC3B,MAAMib,GAAMzb,KAAKkb,GAAI1b,IAAKgB,GAAK0a,GAAM1a,EACrC,MAAM0b,GAAMlc,KAAKyb,GAAIjc,IAAKgB,GAAK0a,GAAM1a,EACrC,MAAMktE,IAAO1tE,KAAKkc,GAAI3hB,IAAKiG,GAAKiQ,GAAMjQ,EACtC,MAAMmtE,IAAO3tE,KAAK0tE,IAAKL,KAAM7sE,GAAKktE,IAAOltE,EACzC,MAAMotE,IAAO5tE,KAAK2tE,IAAKL,KAAM9sE,GAAKmtE,IAAOntE,EACzC,MAAMqtE,IAAO7tE,KAAK4tE,IAAKJ,KAAMhtE,GAAKotE,IAAOptE,EACzC,MAAMstE,KAAQ9tE,KAAK6tE,IAAKJ,KAAMjtE,GAAKqtE,IAAOrtE,EAC1C,MAAMutE,KAAQ/tE,KAAK8tE,KAAMN,KAAMhtE,GAAKotE,IAAOptE,EAC3C,MAAMwtE,KAAQhuE,KAAK+tE,KAAMvuE,IAAKgB,GAAK0a,GAAM1a,EACzC,MAAMinE,GAAMznE,KAAKguE,KAAMT,KAAM/sE,GAAKmtE,IAAOntE,EACzC,MAAMgB,GAAMxB,KAAKynE,GAAI2F,IAAK5sE,GAAKiQ,GAAMjQ,EACrC,MAAMO,KAAOf,KAAKwB,GAAIjH,IAAKiG,GAC3B,IAAKytE,KAAKjtE,IAAIitE,KAAKhtE,IAAIF,MAAOlc,GAC1B,MAAM,IAAI1H,MAAM,2BACpB,OAAO4jB,IACX,CACA,MAAMktE,KAAOzqE,MAAMwpE,WAAYlrF,UAAWA,UAAW,CAAEsiB,KAAM+oE,UAItD,MAAMe,UAAYpB,YAAY,CACjCnoF,EAAGkH,OAAO,GACV5I,EAAG4I,OAAO,GACV2S,GAAIyvE,KACJ9nF,EAAG8mF,WAEHzkE,GAAI3c,OAAO,iFACX4c,GAAI5c,OAAO,iFACXmG,EAAGnG,OAAO,GACVq4E,KAAM,KAONK,KAAM,CACFC,KAAM34E,OAAO,sEACb44E,YAAchnE,IACV,MAAMtX,EAAI8mF,WACV,MAAMl0D,GAAKltB,OAAO,sCAClB,MAAMgvB,IAAMvgB,IAAMzO,OAAO,sCACzB,MAAMqtB,GAAKrtB,OAAO,uCAClB,MAAM4kB,GAAKsI,GACX,MAAMo1D,UAAYtiF,OAAO,uCACzB,MAAM+V,GAAKsrE,WAAWz8D,GAAKhT,EAAGtX,GAC9B,MAAMioF,GAAKlB,YAAYryD,GAAKpd,EAAGtX,GAC/B,IAAI4hF,GAAKnoE,IAAInC,EAAImE,GAAKmX,GAAKq1D,GAAKl1D,GAAI/yB,GACpC,IAAIikC,GAAKxqB,KAAKgC,GAAKiZ,GAAKuzD,GAAK39D,GAAItqB,GACjC,MAAM2hF,MAAQC,GAAKoG,UACnB,MAAMnG,MAAQ59C,GAAK+jD,UACnB,GAAIrG,MACAC,GAAK5hF,EAAI4hF,GACb,GAAIC,MACA59C,GAAKjkC,EAAIikC,GACb,GAAI29C,GAAKoG,WAAa/jD,GAAK+jD,UAAW,CAClC,MAAM,IAAIhxF,MAAM,uCAAyCsgB,EACzE,CACY,MAAO,CAAEqqE,YAAOC,MAAIC,YAAO59C,MAAI,IAGxC5C,QAGS37B,OAAO,GAiBLqiF,UAAUzF,gBCxGjB,MAAM4F,UAAYA,CACvBpE,QACAh8D,WAEA,MAAM0sB,UAAYuzC,UAAU/+D,KAAK86D,QAASh8D,SAC1C,MAAO,CAAC0sB,UAAUgwC,oBAAqBhwC,UAAUmvC,SAAU,EAE5BoE,UAAUr+D,MAAMg7D,kBAC1C,MAAMyD,gBAAkBJ,UAAUp/D,aCAzC,MAAM4xD,kBAAoB,GAC1B,MAAM6N,uBAAyB,GAC/B,MAAM5N,iBAAmB,GACzB,MAAM6N,kCAAoC,GAiC1C,MAAMC,6BAA+BxyC,cAAmB5H,OActD,CACA4H,cAAAA,GAAgB,iBAChBA,cAAgB5J,IAAC,mBACjB4J,cAAenC,GAAC,6BAChBmC,cAAAA,IAAiB,oBACjBA,cAAenC,GAAC,8BAChBmC,cAAgB5J,IAAC,qBACjB4J,cAAAA,IAAiB,mBACjBA,cAAenC,GAAC,2BAChBmC,cAAAA,KAAkB,GAAI,cACtBA,cAAAA,KAAkB,GAAI,aACtBA,cAAenC,GAAC,gBAGX,MAAM40C,iBAIX9+E,cAAc,CAad8b,6BACE+D,WAEA4C,SACE5C,UAAU1yB,SAAW4jF,iBACrB,sBAAsBA,uCAAuClxD,UAAU1yB,gBAGzE,IACE,OAAO4D,cAAMA,OAAC4B,KAAKohF,WAAWxxD,SAAS1C,aAAa3rB,OACjDyqF,uBAEJ,CAAC,MAAOptF,OACP,MAAM,IAAIhE,MAAM,wCAAwCgE,QAC1D,CACF,CAMAuqB,sCACEwoC,QAEA,MAAMzkC,UAACA,UAASvf,QAAEA,QAAOyqC,UAAEA,UAASg0C,WAAEA,WAAU5N,iBAAEA,kBAChD7sB,OACF,OAAOw6B,iBAAiBE,gCAAgC,CACtDC,WAAYH,iBAAiBI,sBAAsBr/D,WACnDvf,gBACAyqC,oBACAg0C,sBACA5N,mCAEJ,CAMAr1D,uCACEwoC,QAEA,MACE26B,WAAYE,WAAU7+E,QACtBA,QAAOyqC,UACPA,UAASg0C,WACTA,WAAU5N,iBACVA,iBAAmB,GACjB7sB,OAEJ,IAAI26B,WACJ,UAAWE,aAAe,SAAU,CAClC,GAAIA,WAAW1oB,WAAW,MAAO,CAC/BwoB,WAAaluF,cAAMA,OAAC4B,KAAKwsF,WAAWxmF,OAAO,GAAI,MACjD,KAAO,CACLsmF,WAAaluF,cAAMA,OAAC4B,KAAKwsF,WAAY,MACvC,CACF,KAAO,CACLF,WAAaE,UACf,CAEA18D,SACEw8D,WAAW9xF,SAAWwxF,uBACtB,mBAAmBA,6CAA6CM,WAAW9xF,gBAG7E,MAAMiyF,UAAY,EAAIR,kCACtB,MAAMS,iBAAmBD,UACzB,MAAM/N,gBAAkB+N,UAAYH,WAAW9xF,OAC/C,MAAMmkF,kBAAoBD,gBAAkBtmC,UAAU59C,OAAS,EAC/D,MAAMokF,cAAgB,EAEtB,MAAM5sB,gBAAkB5zD,cAAAA,OAAO2C,MAC7BmrF,6BAA6Br5C,KAAOllC,QAAQnT,QAG9C0xF,6BAA6Bv7E,OAC3B,CACEiuE,4BACAF,gCACAG,0BAA2BL,iBAC3BkO,kCACAC,2BAA4BnO,iBAC5BG,oCACAI,gBAAiBpxE,QAAQnT,OACzBwkF,wBAAyBR,iBACzBpmC,UAAWxoB,SAASwoB,WACpBk0C,WAAY18D,SAAS08D,YACrBF,uBAEFp6B,iBAGFA,gBAAgBhxD,KAAK4uB,SAASjiB,SAAUu+E,6BAA6Br5C,MAErE,OAAO,IAAI2P,uBAAuB,CAChCjV,KAAM,GACNY,UAAWg+C,iBAAiBh+C,UAC5BnsC,KAAMgwD,iBAEV,CAMA7oC,uCACEwoC,QAEA,MAAOstB,WAAY2N,KAAIj/E,QAAEA,QAAO6wE,iBAAEA,kBAAoB7sB,OAEtD7hC,SACE88D,KAAKpyF,SAAW2jF,kBAChB,uBAAuBA,wCAAwCyO,KAAKpyF,gBAGtE,IACE,MAAMykF,WAAarvD,SAASg9D,MAC5B,MAAM1/D,UAAY6+D,gBAChB9M,WACA,OACA19E,MAAM,GACR,MAAMsrF,YAAczuF,cAAAA,OAAO4B,KAAKohF,WAAWxxD,SAASjiB,WACpD,MAAOyqC,UAAWg0C,YAAcN,UAAUe,YAAa5N,YAEvD,OAAO3/E,KAAK6/E,+BAA+B,CACzCjyD,oBACAvf,gBACAyqC,oBACAg0C,sBACA5N,mCAEH,CAAC,MAAO5/E,OACP,MAAM,IAAIhE,MAAM,+BAA+BgE,QACjD,CACF,EAxJWutF,iBASJh+C,UAAuB,IAAIN,UAChC,iEC7DSi/C,gBAAkB,IAAIj/C,UACjC,+CAMK,MAAMk/C,WAWX1/E,YAAY2/E,OAAmBC,YAV/B3tF,KACA0tF,YAAM,EACN1tF,KACA2tF,gBAAU,EAQR3tF,KAAK0tF,OAASA,OACd1tF,KAAK2tF,WAAaA,UACpB,EAWK,MAAMC,OAWX7/E,YAAY8/E,cAAuB7vB,MAAe8vB,WAVlD9tF,KACA6tF,mBAAa,EACb7tF,KACAg+D,WAAK,EACLh+D,KACA8tF,eAAS,EAMP9tF,KAAK6tF,cAAgBA,cACrB7tF,KAAKg+D,MAAQA,MACbh+D,KAAK8tF,UAAYA,SACnB,EAMDC,QArBYH,OAAAA,OAoBJzkD,QAAkB,IAAIykD,QAAO,EAAG,EAAGr/C,UAAUpF,SAqI/C,MAAM6kD,iBAIXjgF,cAAc,CAKd8b,6BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAEhC,MAAM4hB,sBAAwBrW,cAAgBtV,IAAC,eAC/C,MAAM4rB,UAAYD,sBAAsB9rB,OAAOqV,YAAYt3C,MAE3D,IAAIF,KACJ,IAAK,MAAOmuD,OAAQ3c,UAAWv0C,OAAO4d,QAAQ4wE,2BAA4B,CACxE,GAAIj6C,OAAO/hB,OAASy+B,UAAW,CAC7BluD,KAAOmuD,OACP,KACF,CACF,CAEA,IAAKnuD,KAAM,CACT,MAAM,IAAIlH,MAAM,qDAClB,CAEA,OAAOkH,IACT,CAKAqnB,wBACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM0M,WAACA,WAAUC,OAAEA,QAAU6R,aAC3BwhC,0BAA0BC,WAC1Bl0C,YAAYt3C,MAGd,MAAO,CACLyrF,YAAan0C,YAAY/L,KAAK,GAAGsB,OACjCoL,WAAY,IAAI8yC,WACd,IAAIl/C,UAAUoM,WAAW+yC,QACzB,IAAIn/C,UAAUoM,WAAWgzC,aAE3B/yC,OAAQ,IAAIgzC,OACVhzC,OAAOizC,cACPjzC,OAAOojB,MACP,IAAIzvB,UAAUqM,OAAOkzC,YAG3B,CAKAjkE,sBACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GACtCwe,aAAWwhC,0BAA0BG,SAAUp0C,YAAYt3C,MAE3D,MAAO,CACLyrF,YAAan0C,YAAY/L,KAAK,GAAGsB,OACjC69B,WAAYpzB,YAAY/L,KAAK,GAAGsB,OAChCud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OAE1C,CAKA1lB,uBACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GACtC,MAAMogD,cAACA,cAAaC,uBAAEA,wBAA0B7hC,aAC9CwhC,0BAA0BM,UAC1Bv0C,YAAYt3C,MAGd,MAAMm0B,EAA0B,CAC9Bs3D,YAAan0C,YAAY/L,KAAK,GAAGsB,OACjCud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OACtC2iB,oBAAqB,IAAI3jB,UAAU8/C,eACnCC,uBAAwB,CACtBr8D,MAAOq8D,yBAGX,GAAIt0C,YAAY/L,KAAK/yC,OAAS,EAAG,CAC/B27B,EAAE23D,gBAAkBx0C,YAAY/L,KAAK,GAAGsB,MAC1C,CACA,OAAO1Y,CACT,CAKAhN,+BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAMogD,cACJA,cAAaC,uBACbA,uBAAsBG,cACtBA,cAAaC,eACbA,gBACEjiC,aACFwhC,0BAA0BU,kBAC1B30C,YAAYt3C,MAGd,MAAMm0B,EAAkC,CACtCs3D,YAAan0C,YAAY/L,KAAK,GAAGsB,OACjCq/C,cAAe50C,YAAY/L,KAAK,GAAGsB,OACnCk/C,cAAeA,cACfC,eAAgB,IAAIngD,UAAUmgD,gBAC9Bx8B,oBAAqB,IAAI3jB,UAAU8/C,eACnCC,uBAAwB,CACtBr8D,MAAOq8D,yBAGX,GAAIt0C,YAAY/L,KAAK/yC,OAAS,EAAG,CAC/B27B,EAAE23D,gBAAkBx0C,YAAY/L,KAAK,GAAGsB,MAC1C,CACA,OAAO1Y,CACT,CAKAhN,mBAAmBmwB,aACjBh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GACtC,MAAM6iB,SAACA,UAAYrE,aACjBwhC,0BAA0BY,MAC1B70C,YAAYt3C,MAGd,MAAO,CACLyrF,YAAan0C,YAAY/L,KAAK,GAAGsB,OACjCu/C,iBAAkB90C,YAAY/L,KAAK,GAAGsB,OACtCud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OACtCuhB,kBAEJ,CAKAjnC,mBAAmBmwB,aACjBh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GACtCwe,aAAWwhC,0BAA0Bc,MAAO/0C,YAAYt3C,MAExD,MAAO,CACLyrF,YAAan0C,YAAY/L,KAAK,GAAGsB,OACjCy/C,kBAAmBh1C,YAAY/L,KAAK,GAAGsB,OACvCud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OAE1C,CAKA1lB,sBACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GACtC,MAAM6iB,SAACA,UAAYrE,aACjBwhC,0BAA0BgB,SAC1Bj1C,YAAYt3C,MAGd,MAAMm0B,EAAyB,CAC7Bs3D,YAAan0C,YAAY/L,KAAK,GAAGsB,OACjC6hB,SAAUpX,YAAY/L,KAAK,GAAGsB,OAC9Bud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OACtCuhB,mBAEF,GAAI9W,YAAY/L,KAAK/yC,OAAS,EAAG,CAC/B27B,EAAE23D,gBAAkBx0C,YAAY/L,KAAK,GAAGsB,MAC1C,CACA,OAAO1Y,CACT,CAKAhN,wBACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GACtCwe,aAAWwhC,0BAA0BiB,WAAYl1C,YAAYt3C,MAE7D,MAAO,CACLyrF,YAAan0C,YAAY/L,KAAK,GAAGsB,OACjCud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OAE1C,CAKA1lB,sBAAsBglB,WACpB,IAAKA,UAAUjqC,OAAOuqF,aAAatgD,WAAY,CAC7C,MAAM,IAAIvzC,MAAM,qDAClB,CACF,CAKAuuB,sBAAsBokB,KAAkBtzB,gBACtC,GAAIszB,KAAK/yC,OAASyf,eAAgB,CAChC,MAAM,IAAIrf,MACR,8BAA8B2yC,KAAK/yC,kCAAkCyf,iBAEzE,CACF,QAwDWszE,0BAA4BxuF,OAAOqiB,OAI7C,CACDosE,WAAY,CACVj8D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAA0C,CACnE4H,cAAgBtV,IAAC,eACjBkN,aACAA,YAGJu8C,UAAW,CACTt8D,MAAO,EACP+hB,OAAQoG,cAAAA,OAA4D,CAClEA,cAAAA,IAAiB,eACjBpI,UAAiB,iBACjBoI,kBAAiB,6BAGrBg0C,SAAU,CACRn8D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAwC,CACjE4H,cAAgBtV,IAAC,kBAGrB+pD,MAAO,CACL58D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAqC,CAC9D4H,cAAgBtV,IAAC,eACjBsV,cAAAA,KAAkB,eAGtB60C,SAAU,CACRh9D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAwC,CACjE4H,cAAgBtV,IAAC,eACjBsV,cAAAA,KAAkB,eAGtB80C,WAAY,CACVj9D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAA0C,CACnE4H,cAAgBtV,IAAC,kBAGrBiqD,MAAO,CACL98D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAqC,CAC9D4H,cAAgBtV,IAAC,kBAGrB6pD,kBAAmB,CACjB18D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OACzB,CACE4H,cAAAA,IAAiB,eACjBpI,UAAiB,iBACjBoI,cAAAA,IAAiB,0BACjBpI,WAAkB,iBAClBA,UAAiB,6BAiBZo9C,yBAA2B3vF,OAAOqiB,OAAO,CACpDutE,OAAQ,CACNp9D,MAAO,GAETq9D,WAAY,CACVr9D,MAAO,KAOJ,MAAMk9D,aAIXphF,cAAc,CAqBd8b,kBAAkBwoC,QAChB,MAAM87B,YAACA,YAAWxzC,WAAEA,WAAYC,OAAQ20C,aAAel9B,OACvD,MAAMzX,OAAiB20C,aAAe3B,OAAOzkD,QAC7C,MAAM3mC,KAAOyrF,0BAA0BC,WACvC,MAAMxrF,KAAO4pD,WAAW9pD,KAAM,CAC5Bm4C,WAAY,CACV+yC,OAAQp9D,SAASqqB,WAAW+yC,OAAOp9D,YACnCq9D,WAAYr9D,SAASqqB,WAAWgzC,WAAWr9D,aAE7CsqB,OAAQ,CACNizC,cAAejzC,OAAOizC,cACtB7vB,MAAOpjB,OAAOojB,MACd8vB,UAAWx9D,SAASsqB,OAAOkzC,UAAUx9D,eAGzC,MAAMoiC,gBAAkB,CACtBzkB,KAAM,CACJ,CAACsB,OAAQ4+C,YAAazyC,SAAU,MAAOC,WAAY,MACnD,CAACpM,OAAQuZ,mBAAoBpN,SAAU,MAAOC,WAAY,QAE5D9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEF,OAAO,IAAIwgD,uBAAuBwP,gBACpC,CAMA7oC,6BACEwoC,QAEA,MAAMlS,YAAc,IAAIgD,YACxBhD,YAAYhrC,IACVg9C,cAAcG,sBAAsB,CAClCrB,WAAYoB,OAAOpB,WACnBC,iBAAkBmB,OAAO87B,YACzB78B,WAAYe,OAAOf,WACnBv1C,KAAMs2C,OAAOt2C,KACb+0C,SAAUuB,OAAOvB,SACjBC,MAAO/wD,KAAK+wD,MACZliB,UAAW7uC,KAAK6uC,aAIpB,MAAMs/C,YAACA,YAAWxzC,WAAEA,WAAUC,OAAEA,QAAUyX,OAC1C,OAAOlS,YAAYhrC,IAAInV,KAAKwvF,WAAW,CAACrB,wBAAaxzC,sBAAYC,gBACnE,CAKA/wB,qBAAqBwoC,QACnB,MAAMlS,YAAc,IAAIgD,YACxBhD,YAAYhrC,IACVg9C,cAAcI,cAAc,CAC1BtB,WAAYoB,OAAOpB,WACnBC,iBAAkBmB,OAAO87B,YACzBr9B,SAAUuB,OAAOvB,SACjBC,MAAO/wD,KAAK+wD,MACZliB,UAAW7uC,KAAK6uC,aAIpB,MAAMs/C,YAACA,YAAWxzC,WAAEA,WAAUC,OAAEA,QAAUyX,OAC1C,OAAOlS,YAAYhrC,IAAInV,KAAKwvF,WAAW,CAACrB,wBAAaxzC,sBAAYC,gBACnE,CAOA/wB,gBAAgBwoC,QACd,MAAM87B,YAACA,YAAWrhC,iBAAEA,iBAAgBsgB,WAAEA,YAAc/a,OAEpD,MAAM7vD,KAAOyrF,0BAA0BG,SACvC,MAAM1rF,KAAO4pD,WAAW9pD,MAExB,OAAO,IAAI2gD,aAAchuC,IAAI,CAC3B84B,KAAM,CACJ,CAACsB,OAAQ4+C,YAAazyC,SAAU,MAAOC,WAAY,MACnD,CAACpM,OAAQ69B,WAAY1xB,SAAU,MAAOC,WAAY,OAClD,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,OAC3D,CACEpM,OAAQ2Z,4BACRxN,SAAU,MACVC,WAAY,OAEd,CAACpM,OAAQi+C,gBAAiB9xC,SAAU,MAAOC,WAAY,OACvD,CAACpM,OAAQud,iBAAkBpR,SAAU,KAAMC,WAAY,QAEzD9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAMAmnB,iBAAiBwoC,QACf,MAAM87B,YACJA,YAAWrhC,iBACXA,iBAAgBoF,oBAChBA,oBAAmBo8B,uBACnBA,uBAAsBE,gBACtBA,iBACEn8B,OAEJ,MAAM7vD,KAAOyrF,0BAA0BM,UACvC,MAAM7rF,KAAO4pD,WAAW9pD,KAAM,CAC5B6rF,cAAe/9D,SAAS4hC,oBAAoB5hC,YAC5Cg+D,uBAAwBA,uBAAuBr8D,QAGjD,MAAMgc,KAAO,CACX,CAACsB,OAAQ4+C,YAAazyC,SAAU,MAAOC,WAAY,MACnD,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,MAC3D,CAACpM,OAAQud,iBAAkBpR,SAAU,KAAMC,WAAY,QAEzD,GAAI6yC,gBAAiB,CACnBvgD,KAAK3xC,KAAK,CACRizC,OAAQi/C,gBACR9yC,SAAU,KACVC,WAAY,OAEhB,CACA,OAAO,IAAIwH,aAAchuC,IAAI,CAC3B84B,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAMAmnB,yBAAyBwoC,QACvB,MAAM87B,YACJA,YAAWS,cACXA,cAAaH,cACbA,cAAaC,eACbA,eAAcx8B,oBACdA,oBAAmBo8B,uBACnBA,uBAAsBE,gBACtBA,iBACEn8B,OAEJ,MAAM7vD,KAAOyrF,0BAA0BU,kBACvC,MAAMjsF,KAAO4pD,WAAW9pD,KAAM,CAC5B6rF,cAAe/9D,SAAS4hC,oBAAoB5hC,YAC5Cg+D,uBAAwBA,uBAAuBr8D,MAC/Cw8D,cAAeA,cACfC,eAAgBp+D,SAASo+D,eAAep+D,cAG1C,MAAM2d,KAAO,CACX,CAACsB,OAAQ4+C,YAAazyC,SAAU,MAAOC,WAAY,MACnD,CAACpM,OAAQq/C,cAAelzC,SAAU,KAAMC,WAAY,OACpD,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,QAE7D,GAAI6yC,gBAAiB,CACnBvgD,KAAK3xC,KAAK,CACRizC,OAAQi/C,gBACR9yC,SAAU,KACVC,WAAY,OAEhB,CACA,OAAO,IAAIwH,aAAchuC,IAAI,CAC3B84B,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,wBAAwBwoC,QACtB,MAAM87B,YAACA,YAAWrhC,iBAAEA,iBAAgBgiC,iBAAEA,iBAAgBh+B,SAAEA,UAAYuB,OACpE,MAAM7vD,KAAOyrF,0BAA0BY,MACvC,MAAMnsF,KAAO4pD,WAAW9pD,KAAM,CAACsuD,oBAC/B,OAAO,IAAI5N,uBAAuB,CAChCjV,KAAM,CACJ,CAACsB,OAAQ4+C,YAAazyC,SAAU,MAAOC,WAAY,MACnD,CAACpM,OAAQu/C,iBAAkBpzC,SAAU,MAAOC,WAAY,MACxD,CAACpM,OAAQud,iBAAkBpR,SAAU,KAAMC,WAAY,QAEzD9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,aACEwoC,OAEAo9B,mBAEA,MAAMtvC,YAAc,IAAIgD,YACxBhD,YAAYhrC,IACVg9C,cAAcI,cAAc,CAC1BtB,WAAYoB,OAAOvF,iBACnBoE,iBAAkBmB,OAAOy8B,iBACzBh+B,SAAU2+B,kBACV1+B,MAAO/wD,KAAK+wD,MACZliB,UAAW7uC,KAAK6uC,aAGpB,OAAOsR,YAAYhrC,IAAInV,KAAK0vF,iBAAiBr9B,QAC/C,CAMAxoC,qBACEwoC,OAEAo9B,mBAEA,MAAMtB,YACJA,YAAWrhC,iBACXA,iBAAgBgiC,iBAChBA,iBAAgBx9B,WAChBA,WAAUv1C,KACVA,KAAI+0C,SACJA,UACEuB,OACJ,MAAMlS,YAAc,IAAIgD,YACxBhD,YAAYhrC,IACVg9C,cAAcr+B,SAAS,CACrB09B,cAAes9B,iBACfx9B,sBACAv1C,UACAg1C,MAAO/wD,KAAK+wD,MACZliB,UAAW7uC,KAAK6uC,aAGpB,GAAI4gD,mBAAqBA,kBAAoB,EAAG,CAC9CtvC,YAAYhrC,IACVg9C,cAAckB,SAAS,CACrBpC,WAAYoB,OAAOvF,iBACnBsE,SAAU09B,iBACVh+B,SAAU2+B,oBAGhB,CACA,OAAOtvC,YAAYhrC,IACjBnV,KAAK0vF,iBAAiB,CACpBvB,wBACArhC,kCACAgiC,kCACAh+B,oBAGN,CAKAjnC,aAAawoC,QACX,MAAM87B,YAACA,YAAWa,kBAAEA,kBAAiBliC,iBAAEA,kBAAoBuF,OAC3D,MAAM7vD,KAAOyrF,0BAA0Bc,MACvC,MAAMrsF,KAAO4pD,WAAW9pD,MAExB,OAAO,IAAI2gD,aAAchuC,IAAI,CAC3B84B,KAAM,CACJ,CAACsB,OAAQ4+C,YAAazyC,SAAU,MAAOC,WAAY,MACnD,CAACpM,OAAQy/C,kBAAmBtzC,SAAU,MAAOC,WAAY,MACzD,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,OAC3D,CACEpM,OAAQ2Z,4BACRxN,SAAU,MACVC,WAAY,OAEd,CAACpM,OAAQud,iBAAkBpR,SAAU,KAAMC,WAAY,QAEzD9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,gBAAgBwoC,QACd,MAAM87B,YAACA,YAAWrhC,iBAAEA,iBAAgBsE,SAAEA,SAAQN,SAAEA,SAAQ09B,gBAAEA,iBACxDn8B,OACF,MAAM7vD,KAAOyrF,0BAA0BgB,SACvC,MAAMvsF,KAAO4pD,WAAW9pD,KAAM,CAACsuD,oBAE/B,MAAM7iB,KAAO,CACX,CAACsB,OAAQ4+C,YAAazyC,SAAU,MAAOC,WAAY,MACnD,CAACpM,OAAQ6hB,SAAU1V,SAAU,MAAOC,WAAY,MAChD,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,OAC3D,CACEpM,OAAQ2Z,4BACRxN,SAAU,MACVC,WAAY,OAEd,CAACpM,OAAQud,iBAAkBpR,SAAU,KAAMC,WAAY,QAEzD,GAAI6yC,gBAAiB,CACnBvgD,KAAK3xC,KAAK,CACRizC,OAAQi/C,gBACR9yC,SAAU,KACVC,WAAY,OAEhB,CACA,OAAO,IAAIwH,aAAchuC,IAAI,CAC3B84B,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,kBAAkBwoC,QAChB,MAAM87B,YAACA,YAAWrhC,iBAAEA,kBAAoBuF,OACxC,MAAM7vD,KAAOyrF,0BAA0BiB,WACvC,MAAMxsF,KAAO4pD,WAAW9pD,MAExB,OAAO,IAAI2gD,aAAchuC,IAAI,CAC3B84B,KAAM,CACJ,CAACsB,OAAQ4+C,YAAazyC,SAAU,MAAOC,WAAY,MACnD,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,OAC3D,CAACpM,OAAQud,iBAAkBpR,SAAU,KAAMC,WAAY,QAEzD9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,EA5WWysF,aASJtgD,UAAuB,IAAIN,UAChC,+CAVS4gD,aAoBJp+B,MAAgB,IC5kBlB,MAAM4+B,SAMX5hF,YACEs/D,WACAuiB,gBACAC,qBACArpB,YACAxmE,KAVFqtE,gBAAU,EAAArtE,KACV4vF,qBAAe,EAAA5vF,KACf6vF,0BAAoB,EAAA7vF,KACpBwmE,gBAAU,EAQRxmE,KAAKqtE,WAAaA,WAClBrtE,KAAK4vF,gBAAkBA,gBACvB5vF,KAAK6vF,qBAAuBA,qBAC5B7vF,KAAKwmE,WAAaA,UACpB,EAmEK,MAAMspB,gBAIX/hF,cAAc,CAKd8b,6BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAEhC,MAAM4hB,sBAAwBrW,cAAgBtV,IAAC,eAC/C,MAAM4rB,UAAYD,sBAAsB9rB,OAAOqV,YAAYt3C,MAE3D,IAAIF,KACJ,IAAK,MAAOmuD,OAAQ3c,UAAWv0C,OAAO4d,QAAQ0yE,0BAA2B,CACvE,GAAI/7C,OAAO/hB,OAASy+B,UAAW,CAC7BluD,KAAOmuD,OACP,KACF,CACF,CAEA,IAAKnuD,KAAM,CACT,MAAM,IAAIlH,MAAM,oDAClB,CAEA,OAAOkH,IACT,CAKAqnB,+BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM4M,SAACA,UAAY4R,aACjBsjC,yBAAyBC,kBACzBh2C,YAAYt3C,MAGd,MAAO,CACL0qE,WAAYpzB,YAAY/L,KAAK,GAAGsB,OAChC89B,WAAYrzB,YAAY/L,KAAK,GAAGsB,OAChCsL,SAAU,IAAI80C,SACZ,IAAIphD,UAAUsM,SAASwyB,YACvB,IAAI9+B,UAAUsM,SAAS+0C,iBACvB,IAAIrhD,UAAUsM,SAASg1C,sBACvBh1C,SAAS2rB,YAGf,CAKA38C,uBACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAMogD,cAACA,cAAa4B,sBAAEA,uBAAyBxjC,aAC7CsjC,yBAAyBxB,UACzBv0C,YAAYt3C,MAGd,MAAO,CACL0qE,WAAYpzB,YAAY/L,KAAK,GAAGsB,OAChCud,iBAAkB9S,YAAY/L,KAAK,GAAGsB,OACtC2iB,oBAAqB,IAAI3jB,UAAU8/C,eACnC4B,sBAAuB,CACrBh+D,MAAOg+D,uBAGb,CAKApmE,+BACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MACE6M,2BAA2Bo1C,sCACzBA,sCAAqCC,+BACrCA,+BAA8B9B,cAC9BA,cAAa4B,sBACbA,wBAEAxjC,aACFsjC,yBAAyBpB,kBACzB30C,YAAYt3C,MAGd,MAAO,CACL0tF,qCAAsCp2C,YAAY/L,KAAK,GAAGsB,OAC1D2gD,sCAAuC,IAAI3hD,UACzC2hD,uCAEFC,+BAAgCA,+BAChCj+B,oBAAqB,IAAI3jB,UAAU8/C,eACnC4B,sBAAuB,CACrBh+D,MAAOg+D,uBAET7iB,WAAYpzB,YAAY/L,KAAK,GAAGsB,OAEpC,CAKA1lB,sBACEmwB,aAEAh6C,KAAKwwD,eAAexW,YAAYnL,WAChC7uC,KAAK6wD,eAAe7W,YAAY/L,KAAM,GAEtC,MAAM6iB,SAACA,UAAYrE,aACjBsjC,yBAAyBd,SACzBj1C,YAAYt3C,MAGd,MAAO,CACL0qE,WAAYpzB,YAAY/L,KAAK,GAAGsB,OAChC8gD,2BAA4Br2C,YAAY/L,KAAK,GAAGsB,OAChDuhB,kBACAM,SAAUpX,YAAY/L,KAAK,GAAGsB,OAElC,CAKA1lB,sBAAsBglB,WACpB,IAAKA,UAAUjqC,OAAO0rF,YAAYzhD,WAAY,CAC5C,MAAM,IAAIvzC,MAAM,oDAClB,CACF,CAKAuuB,sBAAsBokB,KAAkBtzB,gBACtC,GAAIszB,KAAK/yC,OAASyf,eAAgB,CAChC,MAAM,IAAIrf,MACR,8BAA8B2yC,KAAK/yC,kCAAkCyf,iBAEzE,CACF,EA8CF,MAAMo1E,yBAA2BtwF,OAAOqiB,OAIrC,CACDkuE,kBAAmB,CACjB/9D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAgD,CACzE4H,cAAAA,IAAiB,eACjBpI,cAGJu8C,UAAW,CACTt8D,MAAO,EACP+hB,OAAQoG,cAAAA,OAA2D,CACjEA,cAAAA,IAAiB,eACjBpI,UAAiB,iBACjBoI,kBAAiB,4BAGrB60C,SAAU,CACRh9D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAAuC,CAChE4H,cAAgBtV,IAAC,eACjBsV,cAAAA,KAAkB,eAGtBm2C,wBAAyB,CACvBt+D,MAAO,EACP+hB,OAAQoG,cAAmB5H,OAEzB,CAAC4H,cAAgBtV,IAAC,kBAEtB6pD,kBAAmB,CACjB18D,MAAO,GACP+hB,OAAQoG,cAAmB5H,OAAgD,CACzE4H,cAAAA,IAAiB,eACjBpI,uCAgBOw+C,wBAA0B/wF,OAAOqiB,OAAO,CACnD2uE,MAAO,CACLx+D,MAAO,GAETq9D,WAAY,CACVr9D,MAAO,KAOJ,MAAMq+D,YAIXviF,cAAc,CAuBd8b,yBACEwoC,QAEA,MAAM+a,WAACA,WAAUC,WAAEA,WAAUxyB,SAAEA,UAAYwX,OAC3C,MAAM7vD,KAAOutF,yBAAyBC,kBACtC,MAAMttF,KAAO4pD,WAAW9pD,KAAM,CAC5Bq4C,SAAU,CACRwyB,WAAY/8C,SAASuqB,SAASwyB,WAAW/8C,YACzCs/D,gBAAiBt/D,SAASuqB,SAAS+0C,gBAAgBt/D,YACnDu/D,qBAAsBv/D,SACpBuqB,SAASg1C,qBAAqBv/D,YAEhCk2C,WAAY3rB,SAAS2rB,cAGzB,MAAM9T,gBAAkB,CACtBzkB,KAAM,CACJ,CAACsB,OAAQ69B,WAAY1xB,SAAU,MAAOC,WAAY,MAClD,CAACpM,OAAQuZ,mBAAoBpN,SAAU,MAAOC,WAAY,OAC1D,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,OAC3D,CAACpM,OAAQ89B,WAAY3xB,SAAU,KAAMC,WAAY,QAEnD9M,UAAW7uC,KAAK6uC,UAChBnsC,WAEF,OAAO,IAAIwgD,uBAAuBwP,gBACpC,CAKA7oC,qBAAqBwoC,QACnB,MAAMlS,YAAc,IAAIgD,YACxBhD,YAAYhrC,IACVg9C,cAAcI,cAAc,CAC1BtB,WAAYoB,OAAOpB,WACnBC,iBAAkBmB,OAAO+a,WACzBtc,SAAUuB,OAAOvB,SACjBC,MAAO/wD,KAAK+wD,MACZliB,UAAW7uC,KAAK6uC,aAIpB,OAAOsR,YAAYhrC,IACjBnV,KAAK0wF,kBAAkB,CACrBtjB,WAAY/a,OAAO+a,WACnBC,WAAYhb,OAAOxX,SAASwyB,WAC5BxyB,SAAUwX,OAAOxX,WAGvB,CAKAhxB,iBAAiBwoC,QACf,MAAM+a,WACJA,WAAUtgB,iBACVA,iBAAgBoF,oBAChBA,oBAAmB+9B,sBACnBA,uBACE59B,OAEJ,MAAM7vD,KAAOutF,yBAAyBxB,UACtC,MAAM7rF,KAAO4pD,WAAW9pD,KAAM,CAC5B6rF,cAAe/9D,SAAS4hC,oBAAoB5hC,YAC5C2/D,sBAAuBA,sBAAsBh+D,QAG/C,MAAMgc,KAAO,CACX,CAACsB,OAAQ69B,WAAY1xB,SAAU,MAAOC,WAAY,MAClD,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,OAC3D,CAACpM,OAAQud,iBAAkBpR,SAAU,KAAMC,WAAY,QAGzD,OAAO,IAAIwH,aAAchuC,IAAI,CAC3B84B,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAMAmnB,yBAAyBwoC,QACvB,MAAM+9B,qCACJA,qCAAoCF,sCACpCA,sCAAqCC,+BACrCA,+BAA8Bj+B,oBAC9BA,oBAAmB+9B,sBACnBA,sBAAqB7iB,WACrBA,YACE/a,OAEJ,MAAM7vD,KAAOutF,yBAAyBpB,kBACtC,MAAMjsF,KAAO4pD,WAAW9pD,KAAM,CAC5Bs4C,0BAA2B,CACzBo1C,sCAAuC5/D,SACrC4/D,sCAAsC5/D,YAExC6/D,+BAAgCA,+BAChC9B,cAAe/9D,SAAS4hC,oBAAoB5hC,YAC5C2/D,sBAAuBA,sBAAsBh+D,SAIjD,MAAMgc,KAAO,CACX,CAACsB,OAAQ69B,WAAY1xB,SAAU,MAAOC,WAAY,MAClD,CAACpM,OAAQmZ,oBAAqBhN,SAAU,MAAOC,WAAY,OAC3D,CACEpM,OAAQ6gD,qCACR10C,SAAU,KACVC,WAAY,QAIhB,OAAO,IAAIwH,aAAchuC,IAAI,CAC3B84B,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAKAmnB,gBAAgBwoC,QACd,MAAM+a,WAACA,WAAUijB,2BAAEA,2BAA0Bv/B,SAAEA,SAAQM,SAAEA,UAAYiB,OACrE,MAAM7vD,KAAOutF,yBAAyBd,SACtC,MAAMvsF,KAAO4pD,WAAW9pD,KAAM,CAACsuD,oBAE/B,MAAM7iB,KAAO,CACX,CAACsB,OAAQ69B,WAAY1xB,SAAU,MAAOC,WAAY,MAClD,CAACpM,OAAQ6hB,SAAU1V,SAAU,MAAOC,WAAY,MAChD,CAACpM,OAAQ8gD,2BAA4B30C,SAAU,KAAMC,WAAY,QAGnE,OAAO,IAAIwH,aAAchuC,IAAI,CAC3B84B,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,CAUAmnB,oBACEwoC,OACAs+B,0BACAC,mBAEA,GAAIv+B,OAAOvB,SAAW6/B,0BAA4BC,kBAAmB,CACnE,MAAM,IAAIt1F,MACR,4DAEJ,CACA,OAAOg1F,YAAYO,SAASx+B,OAC9B,CAKAxoC,+BACEwoC,QAEA,MAAM+a,WAACA,WAAUijB,2BAAEA,2BAA0BhjB,WAAEA,YAAchb,OAC7D,MAAM7vD,KAAOutF,yBAAyBQ,wBACtC,MAAM7tF,KAAO4pD,WAAW9pD,MAExB,MAAMyrC,KAAO,CACX,CAACsB,OAAQ69B,WAAY1xB,SAAU,MAAOC,WAAY,MAClD,CAACpM,OAAQ89B,WAAY3xB,SAAU,KAAMC,WAAY,OACjD,CAACpM,OAAQ8gD,2BAA4B30C,SAAU,KAAMC,WAAY,QAGnE,OAAO,IAAIwH,aAAchuC,IAAI,CAC3B84B,UACAY,UAAW7uC,KAAK6uC,UAChBnsC,WAEJ,EAvNW4tF,YASJzhD,UAAuB,IAAIN,UAChC,+CAVS+hD,YAsBJv/B,MAAgB,WC1XZ+/B,mBAAqB,IAAIviD,UACpC,+CA2BF,MAAMwiD,WAAatrB,KAAK,CACtBt3D,KAAMrM,SACNkvF,QAAS75B,SAASr1D,UAClBmvF,QAAS95B,SAASr1D,UAClBovF,QAAS/5B,SAASr1D,UAClBqvF,gBAAiBh6B,SAASr1D,YAMrB,MAAMsvF,cAgBXrjF,YAAYiV,IAAgB2lD,MAf5B3oE,KAGAgjB,SAAG,EACHhjB,KAGA2oE,UAAI,EASF3oE,KAAKgjB,IAAMA,IACXhjB,KAAK2oE,KAAOA,IACd,CASA9+C,sBACE/sB,QAEA,IAAIuS,UAAY,IAAIvS,QACpB,MAAMu0F,eAAiB5xC,aAAsBpwC,WAC7C,GAAIgiF,iBAAmB,EAAG,OAAO,KAEjC,MAAMC,WAA+B,GACrC,IAAK,IAAIt2F,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAM4yB,UAAY,IAAI2gB,UACpBuP,cAAczuC,UAAW,EAAG8+B,oBAE9B,MAAMuN,SAAWmC,aAAaxuC,aAAe,EAC7CiiF,WAAWh1F,KAAK,CAACsxB,oBAAW8tB,mBAC9B,CAEA,GAAI41C,WAAW,GAAG1jE,UAAUhpB,OAAOksF,oBAAqB,CACtD,GAAIQ,WAAW,GAAG51C,SAAU,CAC1B,MAAM61C,QAAev/C,aAAoBrN,OAAO7lC,cAAAA,OAAO4B,KAAK2O,YAC5D,MAAMs5D,KAAO1kB,KAAKiV,MAAMq4B,SACxBC,OAAW7oB,KAAMooB,YACjB,OAAO,IAAIK,cAAcE,WAAW,GAAG1jE,UAAW+6C,KACpD,CACF,CAEA,OAAO,IACT,QCnGW8oB,gBAAkB,IAAIljD,UACjC,+CAoEF,MAAMmjD,kBAAoBt3C,cAAmB5H,OAAkB,CAC7DR,UAAiB,cACjBA,UAAiB,wBACjBoI,cAAAA,GAAgB,cAChBA,cAAAA,OACAA,cAAAA,IACEA,cAAmB5H,OAAC,CAClB4H,cAAAA,KAAkB,QAClBA,cAAAA,IAAiB,uBAEnBA,qBAAoBA,cAAAA,OAAqB,GACzC,SAEFA,cAAenC,GAAC,iBAChBmC,cAAiB/J,KAAC,YAClB+J,qBACAA,cAAAA,IACEA,cAAAA,OAAoB,CAClBA,mBAAkB,SAClBpI,UAAiB,qBAEnBoI,cAAAA,OAAoBA,cAAAA,OAAqB,GACzC,oBAEFA,qBACE,CACEA,cAAgB5B,IACd4B,qBAAoB,CAClBpI,UAAiB,oBACjBoI,cAAAA,KAAkB,+BAClBA,cAAAA,KAAkB,iBAEpB,GACA,OAEFA,cAAiB/J,KAAC,OAClB+J,cAAenC,GAAC,YAElB,eAEFmC,qBACgBu3C,cAAAn5C,IACd4B,qBAAoB,CAClBA,mBAAkB,SAClBA,cAAiB/J,KAAC,WAClB+J,cAAiB/J,KAAC,iBAEpB+J,cAAmBr9C,OAACq9C,cAAgBtV,OAAK,GACzC,gBAEFsV,cAAAA,OACE,CAACA,cAAiB/J,KAAC,QAAS+J,cAAiB/J,KAAC,cAC9C,mBAmBG,MAAMuhD,YAcX7jF,YAAY0P,MAAuBzd,KAbnCqtE,gBAAU,EAAArtE,KACV6vF,0BAAoB,EAAA7vF,KACpBwmE,gBAAU,EAAAxmE,KACV0tE,cAAQ,EAAA1tE,KACR6xF,WAAK,EAAA7xF,KACL8xF,sBAAgB,EAAA9xF,KAChB+xF,iBAAW,EAAA/xF,KACXwtE,kBAAY,EAAAxtE,KACZgyF,mBAAa,EAMXhyF,KAAKqtE,WAAa5vD,KAAK4vD,WACvBrtE,KAAK6vF,qBAAuBpyE,KAAKoyE,qBACjC7vF,KAAKwmE,WAAa/oD,KAAK+oD,WACvBxmE,KAAK0tE,SAAWjwD,KAAKiwD,SACrB1tE,KAAK6xF,MAAQp0E,KAAKo0E,MAClB7xF,KAAK8xF,iBAAmBr0E,KAAKq0E,iBAC7B9xF,KAAK+xF,YAAct0E,KAAKs0E,YACxB/xF,KAAKwtE,aAAe/vD,KAAK+vD,aACzBxtE,KAAKgyF,cAAgBv0E,KAAKu0E,aAC5B,CAQAnoE,uBACE/sB,QAEA,MAAMm1F,cAAgB,EACtB,MAAMC,GAAKR,kBAAkB/sD,OAAOrU,SAASxzB,QAASm1F,eAEtD,IAAIvkB,SAA0BwkB,GAAGxkB,SACjC,IAAKwkB,GAAGC,cAAe,CACrBzkB,SAAW,IACb,CAEA,OAAO,IAAIkkB,YAAY,CACrBvkB,WAAY,IAAI9+B,UAAU2jD,GAAG7kB,YAC7BwiB,qBAAsB,IAAIthD,UAAU2jD,GAAGrC,sBACvCrpB,WAAY0rB,GAAG1rB,WACfqrB,MAAOK,GAAGL,MACVnkB,kBACAokB,iBAAkBI,GAAGJ,iBAAiBx7E,IAAI87E,sBAC1CL,YAAaM,eAAeH,GAAGH,aAC/BvkB,aAAc0kB,GAAG1kB,aACjBwkB,cAAeE,GAAGF,eAEtB,EAGF,SAASI,sBAAqBxC,gBAC5BA,gBAAe5xB,MACfA,QAEA,MAAO,CACLA,YACA4xB,gBAAiB,IAAIrhD,UAAUqhD,iBAEnC,CAEA,SAAS0C,kBAAiBxlC,iBACxBA,iBAAgBylC,4BAChBA,4BAA2BC,YAC3BA,cAEA,MAAO,CACL1lC,iBAAkB,IAAIve,UAAUue,kBAChCylC,wDACAC,wBAEJ,CAEA,SAASH,gBAAehyF,IAACA,IAAGysC,IAAEA,IAAG2lD,QAAEA,UACjC,GAAIA,QAAS,CACX,MAAO,EACT,CAEA,MAAO,IACFpyF,IAAI4B,MAAM6qC,IAAM,GAAGx2B,IAAIg8E,qBACvBjyF,IAAI4B,MAAM,EAAG6qC,KAAKx2B,IAAIg8E,kBAE7B,CC3OA,MAAMpuB,SAAW,CACfwuB,KAAM,CACJC,OAAQ,+BACRC,QAAS,gCACT,eAAgB,uCAElBC,MAAO,CACLF,OAAQ,gCACRC,QAAS,iCACT,eAAgB,yCAab,SAASE,cAAcC,QAAmBC,KAC/C,MAAMhwE,IAAMgwE,MAAQ,MAAQ,OAAS,QAErC,IAAKD,QAAS,CACZ,OAAO7uB,SAASlhD,KAAK,SACvB,CAEA,MAAM8/C,IAAMoB,SAASlhD,KAAK+vE,SAC1B,IAAKjwB,IAAK,CACR,MAAM,IAAIxnE,MAAM,WAAW0nB,gBAAgB+vE,UAC7C,CACA,OAAOjwB,GACT,CCQOpd,eAAeutC,6BACpBttC,WACA+0B,eACAwY,qCAIAC,qBAEA,IAAIC,qBACJ,IAAI7lE,QACJ,GACE2lE,sCACAzzF,OAAOE,UAAUspC,eAAezlC,KAC9B0vF,qCACA,wBAEF,CACAE,qBACEF,qCACF3lE,QAAU4lE,mBACZ,MAAO,GACLD,sCACAzzF,OAAOE,UAAUspC,eAAezlC,KAC9B0vF,qCACA,cAEF,CACAE,qBACEF,qCACF3lE,QAAU4lE,mBACZ,KAAO,CACL5lE,QAAU2lE,oCAGZ,CACA,MAAM1nC,YAAcj+B,SAAW,CAC7Bk+B,cAAel+B,QAAQk+B,cACvBC,oBAAqBn+B,QAAQm+B,qBAAuBn+B,QAAQo+B,WAC5DhI,eAAgBp2B,QAAQo2B,gBAG1B,MAAM7K,gBAAkB6M,WAAW80B,mBACjCC,eACAlvB,aAGF,MAAMG,WAAap+B,SAAWA,QAAQo+B,WACtC,MAAMqqB,oBAAsBod,qBACxBztC,WAAWoG,mBAAmBqnC,qBAAsBznC,YACpDhG,WAAWoG,mBAAmBjT,UAAW6S,YAC7C,MAAMG,cAAgBkqB,qBAAqBh4E,MAE3C,GAAI8tD,OAAO1c,IAAK,CACd,GAAI0J,WAAa,KAAM,CACrB,MAAM,IAAIqQ,qBAAqB,CAC7BC,OAAQoC,aAAaC,cAAgB,OAAS,WAC9C3S,UAAWA,UACXuQ,mBAAoB,YAAYpF,KAAKC,UAAU4H,YAEnD,CACA,MAAM,IAAIxwD,MACR,mBAAmBw9C,qBAAqBmL,KAAKC,UAAU4H,WAE3D,CAEA,OAAOhT,SACT,CCtFO,MAAMu6C,iBAAmB","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,16,17,18,19,20,21,22,23,24,25,30,53,54,55,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,80,81,91,92,93,94,95,96,97]}